summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2010-02-15 21:14:01 +0000
committerZach Copley <zach@status.net>2010-02-15 21:14:01 +0000
commit82033b3773ac0fc95236716388a02bb6d2da2cab (patch)
treef58d7a9a220035e63fa13bc36f0922c5f1c8d729
parentfe2ebec732ecae97b0616cdf627cbaeaf53dab48 (diff)
parent14a7353fd5583066b154836cccf035e87310ee97 (diff)
Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
-rw-r--r--actions/apitimelinefavorites.php69
-rw-r--r--actions/apitimelinefriends.php74
-rw-r--r--actions/apitimelinegroup.php62
-rw-r--r--actions/apitimelinehome.php60
-rw-r--r--actions/apitimelinementions.php34
-rw-r--r--actions/apitimelinepublic.php31
-rw-r--r--actions/apitimelineretweetsofme.php36
-rw-r--r--actions/apitimelinetag.php51
-rw-r--r--actions/apitimelineuser.php49
-rw-r--r--actions/editapplication.php2
-rw-r--r--actions/groupmembers.php4
-rw-r--r--actions/makeadmin.php3
-rw-r--r--actions/newapplication.php2
-rw-r--r--actions/showgroup.php4
-rw-r--r--actions/showstream.php4
-rw-r--r--classes/Memcached_DataObject.php2
-rw-r--r--classes/Nonce.php15
-rw-r--r--classes/Notice.php60
-rw-r--r--classes/Profile.php86
-rw-r--r--classes/User_group.php37
-rw-r--r--classes/statusnet.links.ini7
-rw-r--r--js/util.js48
-rw-r--r--lib/api.php21
-rw-r--r--lib/atom10entry.php106
-rw-r--r--lib/atom10feed.php293
-rw-r--r--lib/atomnoticefeed.php103
-rw-r--r--lib/cache.php4
-rw-r--r--lib/default.php1
-rw-r--r--lib/error.php10
-rw-r--r--lib/httpclient.php5
-rw-r--r--lib/mysqlschema.php1
-rw-r--r--lib/queuemanager.php36
-rw-r--r--lib/right.php1
-rw-r--r--lib/spawningdaemon.php2
-rw-r--r--lib/statusnet.php11
-rw-r--r--lib/stompqueuemanager.php44
-rw-r--r--lib/util.php8
-rw-r--r--locale/ar/LC_MESSAGES/statusnet.po114
-rw-r--r--locale/arz/LC_MESSAGES/statusnet.po249
-rw-r--r--locale/bg/LC_MESSAGES/statusnet.po116
-rw-r--r--locale/ca/LC_MESSAGES/statusnet.po59
-rw-r--r--locale/cs/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/de/LC_MESSAGES/statusnet.po93
-rw-r--r--locale/el/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/en_GB/LC_MESSAGES/statusnet.po84
-rw-r--r--locale/es/LC_MESSAGES/statusnet.po943
-rw-r--r--locale/fa/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/fi/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/fr/LC_MESSAGES/statusnet.po56
-rw-r--r--locale/ga/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/he/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/hsb/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/ia/LC_MESSAGES/statusnet.po970
-rw-r--r--locale/is/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/it/LC_MESSAGES/statusnet.po345
-rw-r--r--locale/ja/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/ko/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/mk/LC_MESSAGES/statusnet.po61
-rw-r--r--locale/nb/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/nl/LC_MESSAGES/statusnet.po60
-rw-r--r--locale/nn/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/pl/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/pt/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/pt_BR/LC_MESSAGES/statusnet.po157
-rw-r--r--locale/ru/LC_MESSAGES/statusnet.po86
-rw-r--r--locale/statusnet.po80
-rw-r--r--locale/sv/LC_MESSAGES/statusnet.po68
-rw-r--r--locale/te/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/tr/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/uk/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/vi/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/zh_CN/LC_MESSAGES/statusnet.po54
-rw-r--r--locale/zh_TW/LC_MESSAGES/statusnet.po54
-rw-r--r--plugins/FeedSub/FeedSubPlugin.php115
-rw-r--r--plugins/FeedSub/feedinfo.php268
-rw-r--r--plugins/FeedSub/feedinfo.sql14
-rw-r--r--plugins/MemcachePlugin.php18
-rw-r--r--plugins/OStatus/OStatusPlugin.php276
-rw-r--r--plugins/OStatus/README (renamed from plugins/FeedSub/README)0
-rw-r--r--plugins/OStatus/actions/feedsubsettings.php (renamed from plugins/FeedSub/actions/feedsubsettings.php)44
-rw-r--r--plugins/OStatus/actions/hostmeta.php42
-rw-r--r--plugins/OStatus/actions/ostatusinit.php128
-rw-r--r--plugins/OStatus/actions/ostatussub.php226
-rw-r--r--plugins/OStatus/actions/pushcallback.php (renamed from plugins/FeedSub/actions/feedsubcallback.php)49
-rw-r--r--plugins/OStatus/actions/pushhub.php176
-rw-r--r--plugins/OStatus/actions/salmon.php81
-rw-r--r--plugins/OStatus/actions/webfinger.php77
-rw-r--r--plugins/OStatus/classes/HubSub.php272
-rw-r--r--plugins/OStatus/classes/Ostatus_profile.php644
-rw-r--r--plugins/OStatus/extlib/README (renamed from plugins/FeedSub/extlib/README)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser.php)0
-rw-r--r--plugins/OStatus/extlib/XML/Feed/Parser/Atom.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/Exception.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/Exception.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS09.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS1.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS11.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php)0
-rw-r--r--plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php)0
-rw-r--r--plugins/OStatus/extlib/XML/Feed/Parser/Type.php (renamed from plugins/FeedSub/extlib/XML/Feed/Parser/Type.php)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/delicious.feed (renamed from plugins/FeedSub/extlib/XML/Feed/samples/delicious.feed)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/flickr.feed (renamed from plugins/FeedSub/extlib/XML/Feed/samples/flickr.feed)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/hoder.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/hoder.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml (renamed from plugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/technorati.feed (renamed from plugins/FeedSub/extlib/XML/Feed/samples/technorati.feed)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/schemas/atom.rnc (renamed from plugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc (renamed from plugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc)0
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc (renamed from plugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc)0
-rw-r--r--plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch (renamed from plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch)0
-rw-r--r--plugins/OStatus/images/24px-Feed-icon.svg.png (renamed from plugins/FeedSub/images/24px-Feed-icon.svg.png)bin1204 -> 1204 bytes
-rw-r--r--plugins/OStatus/images/48px-Feed-icon.svg.png (renamed from plugins/FeedSub/images/48px-Feed-icon.svg.png)bin2434 -> 2434 bytes
-rw-r--r--plugins/OStatus/images/96px-Feed-icon.svg.png (renamed from plugins/FeedSub/images/96px-Feed-icon.svg.png)bin5440 -> 5440 bytes
-rw-r--r--plugins/OStatus/images/README (renamed from plugins/FeedSub/images/README)0
-rw-r--r--plugins/OStatus/lib/activity.php85
-rw-r--r--plugins/OStatus/lib/feeddiscovery.php (renamed from plugins/FeedSub/feeddiscovery.php)36
-rw-r--r--plugins/OStatus/lib/feedmunger.php (renamed from plugins/FeedSub/feedmunger.php)171
-rw-r--r--plugins/OStatus/lib/hubdistribqueuehandler.php185
-rw-r--r--plugins/OStatus/lib/huboutqueuehandler.php52
-rw-r--r--plugins/OStatus/lib/hubverifyqueuehandler.php53
-rw-r--r--plugins/OStatus/lib/salmon.php64
-rw-r--r--plugins/OStatus/lib/webfinger.php143
-rw-r--r--plugins/OStatus/lib/xrd.php183
-rw-r--r--plugins/OStatus/locale/OStatus.po (renamed from plugins/FeedSub/locale/FeedSub.po)0
-rw-r--r--plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po (renamed from plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po)0
-rw-r--r--plugins/OStatus/tests/FeedDiscoveryTest.php (renamed from plugins/FeedSub/tests/FeedDiscoveryTest.php)0
-rw-r--r--plugins/OStatus/tests/FeedMungerTest.php (renamed from plugins/FeedSub/tests/FeedMungerTest.php)0
-rw-r--r--plugins/OStatus/tests/gettext-speedtest.php (renamed from plugins/FeedSub/tests/gettext-speedtest.php)0
-rw-r--r--plugins/Realtime/realtimeupdate.js6
-rw-r--r--scripts/decache.php8
-rw-r--r--theme/base/css/display.css26
-rw-r--r--theme/default/css/display.css23
-rw-r--r--theme/identica/css/display.css21
147 files changed, 6489 insertions, 3004 deletions
diff --git a/actions/apitimelinefavorites.php b/actions/apitimelinefavorites.php
index 1027d97d4..f7f900ddf 100644
--- a/actions/apitimelinefavorites.php
+++ b/actions/apitimelinefavorites.php
@@ -100,11 +100,11 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
function showTimeline()
{
- $profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
+ $profile = $this->user->getProfile();
+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- $sitename = common_config('site', 'name');
- $title = sprintf(
+ $sitename = common_config('site', 'name');
+ $title = sprintf(
_('%1$s / Favorites from %2$s'),
$sitename,
$this->user->nickname
@@ -112,32 +112,69 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:Favorites:" . $this->user->id;
- $link = common_local_url(
- 'favorites',
- array('nickname' => $this->user->nickname)
- );
- $subtitle = sprintf(
+
+ $subtitle = sprintf(
_('%1$s updates favorited by %2$s / %2$s.'),
$sitename,
$profile->getBestName(),
$this->user->nickname
);
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ $logo = !empty($avatar)
+ ? $avatar->displayUrl()
+ : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
+ $link = common_local_url(
+ 'showfavorites',
+ array('nickname' => $this->user->nickname)
+ );
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $logo
+ );
break;
case 'atom':
- $selfuri = common_root_url() .
- ltrim($_SERVER['QUERY_STRING'], 'p=');
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link, $subtitle,
- null, $selfuri, $logo
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'showfavorites',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineFavorites', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
diff --git a/actions/apitimelinefriends.php b/actions/apitimelinefriends.php
index 4e3827bae..0af04fe4f 100644
--- a/actions/apitimelinefriends.php
+++ b/actions/apitimelinefriends.php
@@ -114,39 +114,71 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
$title = sprintf(_("%s and friends"), $this->user->nickname);
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:FriendsTimeline:" . $this->user->id;
- $link = common_local_url(
- 'all', array('nickname' => $this->user->nickname)
- );
- $subtitle = sprintf(
- _('Updates from %1$s and friends on %2$s!'),
- $this->user->nickname, $sitename
- );
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+
+ $subtitle = sprintf(
+ _('Updates from %1$s and friends on %2$s!'),
+ $this->user->nickname, $sitename
+ );
+
+ $logo = (!empty($avatar))
+ ? $avatar->displayUrl()
+ : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
+
+ $link = common_local_url(
+ 'all', array(
+ 'nickname' => $this->user->nickname
+ )
+ );
+
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $logo
+ );
break;
case 'atom':
- $target_id = $this->arg('id');
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
- if (isset($target_id)) {
- $selfuri = common_root_url() .
- 'api/statuses/friends_timeline/' .
- $target_id . '.atom';
- } else {
- $selfuri = common_root_url() .
- 'api/statuses/friends_timeline.atom';
+ $atom->addLink(
+ common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
}
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, null, $selfuri, $logo
- );
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineFriends', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
diff --git a/actions/apitimelinegroup.php b/actions/apitimelinegroup.php
index af414c680..45962fa76 100644
--- a/actions/apitimelinegroup.php
+++ b/actions/apitimelinegroup.php
@@ -109,39 +109,71 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
$title = sprintf(_("%s timeline"), $this->group->nickname);
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:GroupTimeline:" . $this->group->id;
- $link = common_local_url(
- 'showgroup',
- array('nickname' => $this->group->nickname)
- );
+
$subtitle = sprintf(
_('Updates from %1$s on %2$s!'),
$this->group->nickname,
$sitename
);
- $logo = ($avatar) ? $avatar : User_group::defaultLogo(AVATAR_PROFILE_SIZE);
+
+ $logo = ($avatar) ? $avatar : User_group::defaultLogo(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
- break;
- case 'atom':
- $selfuri = common_root_url() .
- 'api/statusnet/groups/timeline/' .
- $this->group->nickname . '.atom';
- $this->showAtomTimeline(
+ $this->showRssTimeline(
$this->notices,
$title,
- $id,
- $link,
+ $this->group->homeUrl(),
$subtitle,
null,
- $selfuri,
$logo
);
break;
+ case 'atom':
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ try {
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addAuthorRaw($this->group->asAtomAuthor());
+ $atom->setActivitySubject($this->group->asActivitySubject());
+
+ $atom->addLink($this->group->homeUrl());
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineGroup', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
+ } catch (Atom10FeedException $e) {
+ $this->serverError(
+ 'Could not generate feed for group - ' . $e->getMessage()
+ );
+ return;
+ }
+
+ break;
case 'json':
$this->showJsonTimeline($this->notices);
break;
diff --git a/actions/apitimelinehome.php b/actions/apitimelinehome.php
index 828eae6cf..ae4168070 100644
--- a/actions/apitimelinehome.php
+++ b/actions/apitimelinehome.php
@@ -115,39 +115,67 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
$title = sprintf(_("%s and friends"), $this->user->nickname);
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:HomeTimeline:" . $this->user->id;
- $link = common_local_url(
- 'all', array('nickname' => $this->user->nickname)
- );
+
$subtitle = sprintf(
_('Updates from %1$s and friends on %2$s!'),
$this->user->nickname, $sitename
);
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+
+ $logo = (!empty($avatar))
+ ? $avatar->displayUrl()
+ : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
+ $link = common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ );
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $logo
+ );
break;
case 'atom':
- $target_id = $this->arg('id');
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
- if (isset($target_id)) {
- $selfuri = common_root_url() .
- 'api/statuses/home_timeline/' .
- $target_id . '.atom';
- } else {
- $selfuri = common_root_url() .
- 'api/statuses/home_timeline.atom';
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
}
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, null, $selfuri, $logo
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineHome', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
diff --git a/actions/apitimelinementions.php b/actions/apitimelinementions.php
index 9dc2162cc..d2e31d0bd 100644
--- a/actions/apitimelinementions.php
+++ b/actions/apitimelinementions.php
@@ -137,12 +137,36 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
$this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
break;
case 'atom':
- $selfuri = common_root_url() .
- ltrim($_SERVER['QUERY_STRING'], 'p=');
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link, $subtitle,
- null, $selfuri, $logo
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'replies',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineMentions', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
diff --git a/actions/apitimelinepublic.php b/actions/apitimelinepublic.php
index 3f4a46c0f..c1fa72a3e 100644
--- a/actions/apitimelinepublic.php
+++ b/actions/apitimelinepublic.php
@@ -75,6 +75,10 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$this->notices = $this->getNotices();
+ if ($this->since) {
+ throw new ServerException("since parameter is disabled for performance; use since_id", 403);
+ }
+
return true;
}
@@ -118,11 +122,28 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $sitelogo);
break;
case 'atom':
- $selfuri = common_root_url() . 'api/statuses/public_timeline.atom';
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, null, $selfuri, $sitelogo
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($sitelogo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(common_local_url('public'));
+
+ $atom->addLink(
+ $this->getSelfUri(
+ 'ApiTimelinePublic', array('format' => 'atom')
+ ),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
@@ -145,7 +166,7 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$notice = Notice::publicStream(
($this->page - 1) * $this->count, $this->count, $this->since_id,
- $this->max_id, $this->since
+ $this->max_id
);
while ($notice->fetch()) {
diff --git a/actions/apitimelineretweetsofme.php b/actions/apitimelineretweetsofme.php
index e4b09e9bd..26706a75e 100644
--- a/actions/apitimelineretweetsofme.php
+++ b/actions/apitimelineretweetsofme.php
@@ -99,6 +99,8 @@ class ApiTimelineRetweetsOfMeAction extends ApiAuthAction
$strm = $this->auth_user->repeatsOfMe($offset, $limit, $this->since_id, $this->max_id);
+ common_debug(var_export($strm, true));
+
switch ($this->format) {
case 'xml':
$this->showXmlTimeline($strm);
@@ -112,10 +114,38 @@ class ApiTimelineRetweetsOfMeAction extends ApiAuthAction
$title = sprintf(_("Repeats of %s"), $this->auth_user->nickname);
$taguribase = common_config('integration', 'taguri');
$id = "tag:$taguribase:RepeatsOfMe:" . $this->auth_user->id;
- $link = common_local_url('showstream',
- array('nickname' => $this->auth_user->nickname));
- $this->showAtomTimeline($strm, $title, $id, $link);
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'showstream',
+ array('nickname' => $this->auth_user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineRetweetsOfMe', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addEntryFromNotices($strm);
+
+ $this->raw($atom->getString());
+
break;
default:
diff --git a/actions/apitimelinetag.php b/actions/apitimelinetag.php
index 1427d23b6..5b6ded4c0 100644
--- a/actions/apitimelinetag.php
+++ b/actions/apitimelinetag.php
@@ -100,10 +100,6 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
$sitename = common_config('site', 'name');
$sitelogo = (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png');
$title = sprintf(_("Notices tagged with %s"), $this->tag);
- $link = common_local_url(
- 'tag',
- array('tag' => $this->tag)
- );
$subtitle = sprintf(
_('Updates tagged with %1$s on %2$s!'),
$this->tag,
@@ -117,23 +113,52 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $sitelogo);
- break;
- case 'atom':
- $selfuri = common_root_url() .
- 'api/statusnet/tags/timeline/' .
- $this->tag . '.atom';
- $this->showAtomTimeline(
+ $link = common_local_url(
+ 'tag',
+ array('tag' => $this->tag)
+ );
+ $this->showRssTimeline(
$this->notices,
$title,
- $id,
$link,
$subtitle,
null,
- $selfuri,
$sitelogo
);
break;
+ case 'atom':
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'tag',
+ array('tag' => $this->tag)
+ )
+ );
+
+ $aargs = array('format' => 'atom');
+ if (!empty($this->tag)) {
+ $aargs['tag'] = $this->tag;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineTag', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addEntryFromNotices($this->notices);
+ $this->raw($atom->getString());
+
+ break;
case 'json':
$this->showJsonTimeline($this->notices);
break;
diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php
index 830b16941..d20bb0d20 100644
--- a/actions/apitimelineuser.php
+++ b/actions/apitimelineuser.php
@@ -145,18 +145,47 @@ class ApiTimelineUserAction extends ApiBareAuthAction
);
break;
case 'atom':
- if (isset($apidata['api_arg'])) {
- $selfuri = common_root_url() .
- 'api/statuses/user_timeline/' .
- $apidata['api_arg'] . '.atom';
- } else {
- $selfuri = common_root_url() .
- 'api/statuses/user_timeline.atom';
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'showstream',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
}
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, $suplink, $selfuri, $logo
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineUser', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addLink(
+ $suplink,
+ array(
+ 'rel' => 'http://api.friendfeed.com/2008/03#sup',
+ 'type' => 'application/json'
+ )
);
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
diff --git a/actions/editapplication.php b/actions/editapplication.php
index ca5dba1e4..64cf0a574 100644
--- a/actions/editapplication.php
+++ b/actions/editapplication.php
@@ -277,7 +277,7 @@ class EditApplicationAction extends OwnerDesignAction
function nameExists($name)
{
$newapp = Oauth_application::staticGet('name', $name);
- if (!$newapp) {
+ if (empty($newapp)) {
return false;
} else {
return $newapp->id != $this->app->id;
diff --git a/actions/groupmembers.php b/actions/groupmembers.php
index 0f47c268d..f16e972a4 100644
--- a/actions/groupmembers.php
+++ b/actions/groupmembers.php
@@ -192,7 +192,9 @@ class GroupMemberListItem extends ProfileListItem
{
$user = common_current_user();
- if (!empty($user) && $user->id != $this->profile->id && $user->isAdmin($this->group) &&
+ if (!empty($user) &&
+ $user->id != $this->profile->id &&
+ ($user->isAdmin($this->group) || $user->hasRight(Right::MAKEGROUPADMIN)) &&
!$this->profile->isAdmin($this->group)) {
$this->out->elementStart('li', 'entity_make_admin');
$maf = new MakeAdminForm($this->out, $this->profile, $this->group,
diff --git a/actions/makeadmin.php b/actions/makeadmin.php
index 9ad7d6e7c..f19348648 100644
--- a/actions/makeadmin.php
+++ b/actions/makeadmin.php
@@ -87,7 +87,8 @@ class MakeadminAction extends Action
return false;
}
$user = common_current_user();
- if (!$user->isAdmin($this->group)) {
+ if (!$user->isAdmin($this->group) &&
+ !$user->hasRight(Right::MAKEGROUPADMIN)) {
$this->clientError(_('Only an admin can make another user an admin.'), 401);
return false;
}
diff --git a/actions/newapplication.php b/actions/newapplication.php
index c0c520797..0f819b349 100644
--- a/actions/newapplication.php
+++ b/actions/newapplication.php
@@ -290,7 +290,7 @@ class NewApplicationAction extends OwnerDesignAction
function nameExists($name)
{
$app = Oauth_application::staticGet('name', $name);
- return ($app !== false);
+ return !empty($app);
}
}
diff --git a/actions/showgroup.php b/actions/showgroup.php
index 8042a4951..eb1238902 100644
--- a/actions/showgroup.php
+++ b/actions/showgroup.php
@@ -330,13 +330,13 @@ class ShowgroupAction extends GroupDesignAction
new Feed(Feed::RSS2,
common_local_url('ApiTimelineGroup',
array('format' => 'rss',
- 'id' => $this->group->nickname)),
+ 'id' => $this->group->id)),
sprintf(_('Notice feed for %s group (RSS 2.0)'),
$this->group->nickname)),
new Feed(Feed::ATOM,
common_local_url('ApiTimelineGroup',
array('format' => 'atom',
- 'id' => $this->group->nickname)),
+ 'id' => $this->group->id)),
sprintf(_('Notice feed for %s group (Atom)'),
$this->group->nickname)),
new Feed(Feed::FOAF,
diff --git a/actions/showstream.php b/actions/showstream.php
index 07cc68b76..f9407e35a 100644
--- a/actions/showstream.php
+++ b/actions/showstream.php
@@ -131,14 +131,14 @@ class ShowstreamAction extends ProfileAction
new Feed(Feed::RSS2,
common_local_url('ApiTimelineUser',
array(
- 'id' => $this->user->nickname,
+ 'id' => $this->user->id,
'format' => 'rss')),
sprintf(_('Notice feed for %s (RSS 2.0)'),
$this->user->nickname)),
new Feed(Feed::ATOM,
common_local_url('ApiTimelineUser',
array(
- 'id' => $this->user->nickname,
+ 'id' => $this->user->id,
'format' => 'atom')),
sprintf(_('Notice feed for %s (Atom)'),
$this->user->nickname)),
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index ab65c30ce..dfd06b57e 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -363,7 +363,7 @@ class Memcached_DataObject extends DB_DataObject
$cached[] = clone($inst);
}
$inst->free();
- $c->set($ckey, $cached, MEMCACHE_COMPRESSED, $expiry);
+ $c->set($ckey, $cached, Cache::COMPRESSED, $expiry);
return new ArrayWrapper($cached);
}
diff --git a/classes/Nonce.php b/classes/Nonce.php
index 486a65a3c..2f8ab00b5 100644
--- a/classes/Nonce.php
+++ b/classes/Nonce.php
@@ -22,4 +22,19 @@ class Nonce extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
+
+ /**
+ * Compatibility hack for PHP 5.3
+ *
+ * The statusnet.links.ini entry cannot be read because "," is no longer
+ * allowed in key names when read by parse_ini_file().
+ *
+ * @return array
+ * @access public
+ */
+ function links()
+ {
+ return array('consumer_key,token' => 'token:consumer_key,token');
+ }
+
}
diff --git a/classes/Notice.php b/classes/Notice.php
index f9f386357..73b22d58a 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -783,7 +783,7 @@ class Notice extends Memcached_DataObject
$result = $gi->insert();
- if (!result) {
+ if (!$result) {
common_log_db_error($gi, 'INSERT', __FILE__);
throw new ServerException(_('Problem saving group inbox.'));
}
@@ -917,7 +917,7 @@ class Notice extends Memcached_DataObject
/**
* Same calculation as saveGroups but without the saving
* @fixme merge the functions
- * @return array of Group objects
+ * @return array of Group_inbox objects
*/
function getGroups()
{
@@ -957,7 +957,10 @@ class Notice extends Memcached_DataObject
if ($namespace) {
$attrs = array('xmlns' => 'http://www.w3.org/2005/Atom',
- 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0');
+ 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0',
+ 'xmlns:georss' => 'http://www.georss.org/georss',
+ 'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/',
+ 'xmlns:ostatus' => 'http://ostatus.org/schema/1.0');
} else {
$attrs = array();
}
@@ -983,11 +986,6 @@ class Notice extends Memcached_DataObject
$xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
}
- $xs->elementStart('author');
- $xs->element('name', null, $profile->nickname);
- $xs->element('uri', null, $profile->profileurl);
- $xs->elementEnd('author');
-
if ($source) {
$xs->elementEnd('source');
}
@@ -995,6 +993,9 @@ class Notice extends Memcached_DataObject
$xs->element('title', null, $this->content);
$xs->element('summary', null, $this->content);
+ $xs->raw($profile->asAtomAuthor());
+ $xs->raw($profile->asActivityActor());
+
$xs->element('link', array('rel' => 'alternate',
'href' => $this->bestUrl()));
@@ -1014,6 +1015,43 @@ class Notice extends Memcached_DataObject
}
}
+ if (!empty($this->conversation)
+ && $this->conversation != $this->id) {
+ $xs->element(
+ 'link', array(
+ 'rel' => 'ostatus:conversation',
+ 'href' => common_local_url(
+ 'conversation',
+ array('id' => $this->conversation)
+ )
+ )
+ );
+ }
+
+ $reply_ids = $this->getReplies();
+
+ foreach ($reply_ids as $id) {
+ $profile = Profile::staticGet('id', $id);
+ if (!empty($profile)) {
+ $xs->element(
+ 'link', array(
+ 'rel' => 'ostatus:attention',
+ 'href' => $profile->getAcctUri()
+ )
+ );
+ }
+ }
+
+ if (!empty($this->repeat_of)) {
+ $repeat = Notice::staticGet('id', $this->repeat_of);
+ if (!empty($repeat)) {
+ $xs->element(
+ 'ostatus:forward',
+ array('ref' => $repeat->uri, 'href' => $repeat->bestUrl())
+ );
+ }
+ }
+
$xs->element('content', array('type' => 'html'), $this->rendered);
$tag = new Notice_tag();
@@ -1041,9 +1079,7 @@ class Notice extends Memcached_DataObject
}
if (!empty($this->lat) && !empty($this->lon)) {
- $xs->elementStart('geo', array('xmlns:georss' => 'http://www.georss.org/georss'));
$xs->element('georss:point', null, $this->lat . ' ' . $this->lon);
- $xs->elementEnd('geo');
}
$xs->elementEnd('entry');
@@ -1176,6 +1212,10 @@ class Notice extends Memcached_DataObject
// Figure out who that is.
$sender = Profile::staticGet('id', $profile_id);
+ if (empty($sender)) {
+ return null;
+ }
+
$recipient = common_relative_profile($sender, $nickname, common_sql_now());
if (empty($recipient)) {
diff --git a/classes/Profile.php b/classes/Profile.php
index 1076fb2cb..ab05bb854 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -716,6 +716,7 @@ class Profile extends Memcached_DataObject
switch ($right)
{
case Right::DELETEOTHERSNOTICE:
+ case Right::MAKEGROUPADMIN:
case Right::SANDBOXUSER:
case Right::SILENCEUSER:
case Right::DELETEUSER:
@@ -753,4 +754,89 @@ class Profile extends Memcached_DataObject
return !empty($notice);
}
+
+ /**
+ * Returns an XML string fragment with limited profile information
+ * as an Atom <author> element.
+ *
+ * Assumes that Atom has been previously set up as the base namespace.
+ *
+ * @return string
+ */
+ function asAtomAuthor()
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('author');
+ $xs->element('name', null, $this->nickname);
+ $xs->element('uri', null, $this->profileurl);
+ $xs->elementEnd('author');
+
+ return $xs->getString();
+ }
+
+ /**
+ * Returns an XML string fragment with profile information as an
+ * Activity Streams <activity:actor> element.
+ *
+ * Assumes that 'activity' namespace has been previously defined.
+ *
+ * @return string
+ */
+ function asActivityActor()
+ {
+ return $this->asActivityNoun('actor');
+ }
+
+ /**
+ * Returns an XML string fragment with profile information as an
+ * Activity Streams noun object with the given element type.
+ *
+ * Assumes that 'activity' namespace has been previously defined.
+ *
+ * @param string $element one of 'actor', 'subject', 'object', 'target'
+ * @return string
+ */
+ function asActivityNoun($element)
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('activity:' . $element);
+ $xs->element(
+ 'activity:object-type',
+ null,
+ 'http://activitystrea.ms/schema/1.0/person'
+ );
+ $xs->element(
+ 'id',
+ null,
+ common_local_url(
+ 'userbyid',
+ array('id' => $this->id)
+ )
+ );
+ $xs->element('title', null, $this->getBestName());
+
+ $avatar = $this->getAvatar(AVATAR_PROFILE_SIZE);
+
+ $xs->element(
+ 'link', array(
+ 'type' => empty($avatar) ? 'image/png' : $avatar->mediatype,
+ 'href' => empty($avatar)
+ ? Avatar::defaultImage(AVATAR_PROFILE_SIZE)
+ : $avatar->displayUrl()
+ ),
+ ''
+ );
+
+ $xs->elementEnd('activity:' . $element);
+
+ return $xs->getString();
+ }
+
+ function getAcctUri()
+ {
+ return $this->nickname . '@' . common_config('site', 'server');
+ }
+
}
diff --git a/classes/User_group.php b/classes/User_group.php
index c86eadf8f..379e6b721 100644
--- a/classes/User_group.php
+++ b/classes/User_group.php
@@ -49,12 +49,12 @@ class User_group extends Memcached_DataObject
array('id' => $this->id));
}
- function getNotices($offset, $limit)
+ function getNotices($offset, $limit, $since_id=null, $max_id=null)
{
$ids = Notice::stream(array($this, '_streamDirect'),
array(),
'user_group:notice_ids:' . $this->id,
- $offset, $limit);
+ $offset, $limit, $since_id, $max_id);
return Notice::getStreamByIds($ids);
}
@@ -355,6 +355,39 @@ class User_group extends Memcached_DataObject
return $xs->getString();
}
+ function asAtomAuthor()
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('author');
+ $xs->element('name', null, $this->nickname);
+ $xs->element('uri', null, $this->permalink());
+ $xs->elementEnd('author');
+
+ return $xs->getString();
+ }
+
+ function asActivitySubject()
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('activity:subject');
+ $xs->element('activity:object', null, 'http://activitystrea.ms/schema/1.0/group');
+ $xs->element('id', null, $this->permalink());
+ $xs->element('title', null, $this->getBestName());
+ $xs->element(
+ 'link', array(
+ 'rel' => 'avatar',
+ 'href' => empty($this->homepage_logo)
+ ? User_group::defaultLogo(AVATAR_PROFILE_SIZE)
+ : $this->homepage_logo
+ )
+ );
+ $xs->elementEnd('activity:subject');
+
+ return $xs->getString();
+ }
+
static function register($fields) {
// MAGICALLY put fields into current scope
diff --git a/classes/statusnet.links.ini b/classes/statusnet.links.ini
index 7f233e676..b9dd5af0c 100644
--- a/classes/statusnet.links.ini
+++ b/classes/statusnet.links.ini
@@ -19,8 +19,11 @@ profile_id = profile:id
[token]
consumer_key = consumer:consumer_key
-[nonce]
-consumer_key,token = token:consumer_key,token
+; Compatibility hack for PHP 5.3
+; This entry has been moved to the class definition, as commas are no longer
+; considered valid in keys, causing parse_ini_file() to reject the whole file.
+;[nonce]
+;consumer_key,token = token:consumer_key,token
[confirm_address]
user_id = user:id
diff --git a/js/util.js b/js/util.js
index c6a9682de..639049668 100644
--- a/js/util.js
+++ b/js/util.js
@@ -356,42 +356,44 @@ var SN = { // StatusNet
},
NoticeRepeat: function() {
- $('.form_repeat').live('click', function() {
- SN.U.FormXHR($(this));
+ $('.form_repeat').live('click', function(e) {
+ e.preventDefault();
+
SN.U.NoticeRepeatConfirmation($(this));
return false;
});
},
NoticeRepeatConfirmation: function(form) {
- function NRC() {
- form.closest('.notice-options').addClass('opaque');
- form.addClass('dialogbox');
+ var submit_i = form.find('.submit');
- form.append('<button class="close">&#215;</button>');
- form.find('button.close').click(function(){
- $(this).remove();
+ var submit = submit_i.clone();
+ submit
+ .addClass('submit_dialogbox')
+ .removeClass('submit');
+ form.append(submit);
+ submit.bind('click', function() { SN.U.FormXHR(form); return false; });
- form.closest('.notice-options').removeClass('opaque');
- form.removeClass('dialogbox');
- form.find('.submit_dialogbox').remove();
- form.find('.submit').show();
+ submit_i.hide();
- return false;
- });
- };
+ form
+ .addClass('dialogbox')
+ .append('<button class="close">&#215;</button>')
+ .closest('.notice-options')
+ .addClass('opaque');
- form.find('.submit').bind('click', function(e) {
- e.preventDefault();
+ form.find('button.close').click(function(){
+ $(this).remove();
- var submit = form.find('.submit').clone();
- submit.addClass('submit_dialogbox');
- submit.removeClass('submit');
- form.append(submit);
+ form
+ .removeClass('dialogbox')
+ .closest('.notice-options')
+ .removeClass('opaque');
- $(this).hide();
+ form.find('.submit_dialogbox').remove();
+ form.find('.submit').show();
- NRC();
+ return false;
});
},
diff --git a/lib/api.php b/lib/api.php
index 7d94eaee4..7a99f48e8 100644
--- a/lib/api.php
+++ b/lib/api.php
@@ -77,6 +77,7 @@ class ApiAction extends Action
function prepare($args)
{
+ StatusNet::setApi(true); // reduce exception reports to aid in debugging
parent::prepare($args);
$this->format = $this->arg('format');
@@ -1103,7 +1104,7 @@ class ApiAction extends Action
}
}
- function serverError($msg, $code = 500, $content_type = 'json')
+ function serverError($msg, $code = 500, $content_type = 'xml')
{
$action = $this->trimmed('action');
@@ -1321,4 +1322,22 @@ class ApiAction extends Action
}
}
+ function getSelfUri($action, $aargs)
+ {
+ parse_str($_SERVER['QUERY_STRING'], $params);
+ $pstring = '';
+ if (!empty($params)) {
+ unset($params['p']);
+ $pstring = http_build_query($params);
+ }
+
+ $uri = common_local_url($action, $aargs);
+
+ if (!empty($pstring)) {
+ $uri .= '?' . $pstring;
+ }
+
+ return $uri;
+ }
+
}
diff --git a/lib/atom10entry.php b/lib/atom10entry.php
new file mode 100644
index 000000000..5710c80fc
--- /dev/null
+++ b/lib/atom10entry.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for building / manipulating an Atom entry in memory
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')
+{
+ exit(1);
+}
+
+class Atom10EntryException extends Exception
+{
+}
+
+/**
+ * Class for manipulating an Atom entry in memory. Get the entry as an XML
+ * string with Atom10Entry::getString().
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+class Atom10Entry extends XMLStringer
+{
+ private $namespaces;
+ private $categories;
+ private $content;
+ private $contributors;
+ private $id;
+ private $links;
+ private $published;
+ private $rights;
+ private $source;
+ private $summary;
+ private $title;
+
+ function __construct($indent = true) {
+ parent::__construct($indent);
+ $this->namespaces = array();
+ }
+
+ function addNamespace($namespace, $uri)
+ {
+ $ns = array($namespace => $uri);
+ $this->namespaces = array_merge($this->namespaces, $ns);
+ }
+
+ function initEntry()
+ {
+
+ }
+
+ function endEntry()
+ {
+
+ }
+
+ /**
+ * Check that all required elements have been set, etc.
+ * Throws an Atom10EntryException if something's missing.
+ *
+ * @return void
+ */
+ function validate
+ {
+
+ }
+
+ function getString()
+ {
+ $this->validate();
+
+ $this->initEntry();
+ $this->renderEntries();
+ $this->endEntry();
+
+ return $this->xw->outputMemory();
+ }
+
+} \ No newline at end of file
diff --git a/lib/atom10feed.php b/lib/atom10feed.php
new file mode 100644
index 000000000..806a9684b
--- /dev/null
+++ b/lib/atom10feed.php
@@ -0,0 +1,293 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for building an Atom feed in memory
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET'))
+{
+ exit(1);
+}
+
+class Atom10FeedException extends Exception
+{
+}
+
+/**
+ * Class for building an Atom feed in memory. Get the finished doc
+ * as a string with Atom10Feed::getString().
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+class Atom10Feed extends XMLStringer
+{
+ public $xw;
+ private $namespaces;
+ private $authors;
+ private $subject;
+ private $categories;
+ private $contributors;
+ private $generator;
+ private $icon;
+ private $links;
+ private $logo;
+ private $rights;
+ private $subtitle;
+ private $title;
+ private $published;
+ private $updated;
+ private $entries;
+
+ /**
+ * Constructor
+ *
+ * @param boolean $indent flag to turn indenting on or off
+ *
+ * @return void
+ */
+ function __construct($indent = true) {
+ parent::__construct($indent);
+ $this->namespaces = array();
+ $this->authors = array();
+ $this->links = array();
+ $this->entries = array();
+ $this->addNamespace('xmlns', 'http://www.w3.org/2005/Atom');
+ }
+
+ /**
+ * Add another namespace to the feed
+ *
+ * @param string $namespace the namespace
+ * @param string $uri namspace uri
+ *
+ * @return void
+ */
+ function addNamespace($namespace, $uri)
+ {
+ $ns = array($namespace => $uri);
+ $this->namespaces = array_merge($this->namespaces, $ns);
+ }
+
+ function addAuthor($name, $uri = null, $email = null)
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('author');
+
+ if (!empty($name)) {
+ $xs->element('name', null, $name);
+ } else {
+ throw new Atom10FeedException(
+ 'author element must contain a name element.'
+ );
+ }
+
+ if (!is_null($uri)) {
+ $xs->element('uri', null, $uri);
+ }
+
+ if (!is_null(email)) {
+ $xs->element('email', null, $email);
+ }
+
+ $xs->elementEnd('author');
+
+ array_push($this->authors, $xs->getString());
+ }
+
+ /**
+ * Add an Author to the feed via raw XML string
+ *
+ * @param string $xmlAuthor An XML string representation author
+ *
+ * @return void
+ */
+ function addAuthorRaw($xmlAuthor)
+ {
+ array_push($this->authors, $xmlAuthor);
+ }
+
+ function renderAuthors()
+ {
+ foreach ($this->authors as $author) {
+ $this->raw($author);
+ }
+ }
+
+ /**
+ * Add a activity feed subject via raw XML string
+ *
+ * @param string $xmlSubject An XML string representation of the subject
+ *
+ * @return void
+ */
+ function setActivitySubject($xmlSubject)
+ {
+ $this->subject = $xmlSubject;
+ }
+
+ function getNamespaces()
+ {
+ return $this->namespaces;
+ }
+
+ function initFeed()
+ {
+ $this->xw->startDocument('1.0', 'UTF-8');
+ $commonAttrs = array('xml:lang' => 'en-US');
+ $commonAttrs = array_merge($commonAttrs, $this->namespaces);
+ $this->elementStart('feed', $commonAttrs);
+
+ $this->element('id', null, $this->id);
+ $this->element('title', null, $this->title);
+ $this->element('subtitle', null, $this->subtitle);
+
+ if (!empty($this->logo)) {
+ $this->element('logo', null, $this->logo);
+ }
+
+ $this->element('updated', null, $this->updated);
+
+ $this->renderLinks();
+ }
+
+ /**
+ * Check that all required elements have been set, etc.
+ * Throws an Atom10FeedException if something's missing.
+ *
+ * @return void
+ */
+ function validate()
+ {
+ }
+
+ function renderLinks()
+ {
+ foreach ($this->links as $attrs)
+ {
+ $this->element('link', $attrs, null);
+ }
+ }
+
+ function addEntryRaw($xmlEntry)
+ {
+ array_push($this->entries, $xmlEntry);
+ }
+
+ function addEntry($entry)
+ {
+ array_push($this->entries, $entry->getString());
+ }
+
+ function renderEntries()
+ {
+ foreach ($this->entries as $entry) {
+ $this->raw($entry);
+ }
+ }
+
+ function endFeed()
+ {
+ $this->elementEnd('feed');
+ $this->xw->endDocument();
+ }
+
+ function getString()
+ {
+ $this->validate();
+
+ $this->initFeed();
+ $this->renderAuthors();
+
+ if (!empty($this->subject)) {
+ $this->raw($this->subject);
+ }
+
+ $this->renderEntries();
+ $this->endFeed();
+
+ return $this->xw->outputMemory();
+ }
+
+ function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ function setSubtitle($subtitle)
+ {
+ $this->subtitle = $subtitle;
+ }
+
+ function setLogo($logo)
+ {
+ $this->logo = $logo;
+ }
+
+ function setUpdated($dt)
+ {
+ $this->updated = common_date_iso8601($dt);
+ }
+
+ function setPublished($dt)
+ {
+ $this->published = common_date_iso8601($dt);
+ }
+
+ /**
+ * Adds a link element into the Atom document
+ *
+ * Assumes you want rel="alternate" and type="text/html" unless
+ * you send in $otherAttrs.
+ *
+ * @param string $uri the uri the href needs to point to
+ * @param array $otherAttrs other attributes to stick in
+ *
+ * @return void
+ */
+ function addLink($uri, $otherAttrs = null) {
+ $attrs = array('href' => $uri);
+
+ if (is_null($otherAttrs)) {
+ $attrs['rel'] = 'alternate';
+ $attrs['type'] = 'text/html';
+ } else {
+ $attrs = array_merge($attrs, $otherAttrs);
+ }
+
+ array_push($this->links, $attrs);
+ }
+
+}
diff --git a/lib/atomnoticefeed.php b/lib/atomnoticefeed.php
new file mode 100644
index 000000000..34ed44b2e
--- /dev/null
+++ b/lib/atomnoticefeed.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for building and Atom feed from a collection of notices
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET'))
+{
+ exit(1);
+}
+
+/**
+ * Class for creating a feed that represents a collection of notices. Builds the
+ * feed in memory. Get the feed as a string with AtomNoticeFeed::getString().
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+class AtomNoticeFeed extends Atom10Feed
+{
+ function __construct($indent = true) {
+ parent::__construct($indent);
+
+ // Feeds containing notice info use these namespaces
+
+ $this->addNamespace(
+ 'xmlns:thr',
+ 'http://purl.org/syndication/thread/1.0'
+ );
+
+ $this->addNamespace(
+ 'xmlns:georss',
+ 'http://www.georss.org/georss'
+ );
+
+ $this->addNamespace(
+ 'xmlns:activity',
+ 'http://activitystrea.ms/spec/1.0/'
+ );
+
+ // XXX: What should the uri be?
+ $this->addNamespace(
+ 'xmlns:ostatus',
+ 'http://ostatus.org/schema/1.0'
+ );
+ }
+
+ /**
+ * Add more than one Notice to the feed
+ *
+ * @param mixed $notices an array of Notice objects or handle
+ *
+ */
+ function addEntryFromNotices($notices)
+ {
+ if (is_array($notices)) {
+ foreach ($notices as $notice) {
+ $this->addEntryFromNotice($notice);
+ }
+ } else {
+ while ($notices->fetch()) {
+ $this->addEntryFromNotice($notices);
+ }
+ }
+ }
+
+ /**
+ * Add a single Notice to the feed
+ *
+ * @param Notice $notice a Notice to add
+ */
+ function addEntryFromNotice($notice)
+ {
+ $this->addEntryRaw($notice->asAtomEntry());
+ }
+
+}
diff --git a/lib/cache.php b/lib/cache.php
index 635c96ad4..df6fc3649 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -47,6 +47,8 @@ class Cache
var $_items = array();
static $_inst = null;
+ const COMPRESSED = 1;
+
/**
* Singleton constructor
*
@@ -133,7 +135,7 @@ class Cache
*
* @param string $key The key to use for lookups
* @param string $value The value to store
- * @param integer $flag Flags to use, mostly ignored
+ * @param integer $flag Flags to use, may include Cache::COMPRESSED
* @param integer $expiry Expiry value, mostly ignored
*
* @return boolean success flag
diff --git a/lib/default.php b/lib/default.php
index 16d1330f0..cc6863488 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -88,6 +88,7 @@ $default =
'stomp_manual_failover' => true, // if multiple servers are listed, treat them as separate (enqueue on one randomly, listen on all)
'monitor' => null, // URL to monitor ping endpoint (work in progress)
'softlimit' => '90%', // total size or % of memory_limit at which to restart queue threads gracefully
+ 'spawndelay' => 1, // Wait at least N seconds between (re)spawns of child processes to avoid slamming the queue server with subscription startup
'debug_memory' => false, // true to spit memory usage to log
'inboxes' => true, // true to do inbox distribution & output queueing from in background via 'distrib' queue
),
diff --git a/lib/error.php b/lib/error.php
index 87a4d913b..a6a29119f 100644
--- a/lib/error.php
+++ b/lib/error.php
@@ -56,6 +56,7 @@ class ErrorAction extends Action
$this->code = $code;
$this->message = $message;
+ $this->minimal = StatusNet::isApi();
// XXX: hack alert: usually we aren't going to
// call this page directly, but because it's
@@ -102,7 +103,14 @@ class ErrorAction extends Action
function showPage()
{
- parent::showPage();
+ if ($this->minimal) {
+ // Even more minimal -- we're in a machine API
+ // and don't want to flood the output.
+ $this->extraHeaders();
+ $this->showContent();
+ } else {
+ parent::showPage();
+ }
// We don't want to have any more output after this
exit();
diff --git a/lib/httpclient.php b/lib/httpclient.php
index 3f8262076..4c3af8d7d 100644
--- a/lib/httpclient.php
+++ b/lib/httpclient.php
@@ -81,12 +81,13 @@ class HTTPResponse extends HTTP_Request2_Response
}
/**
- * Check if the response is OK, generally a 200 status code.
+ * Check if the response is OK, generally a 200 or other 2xx status code.
* @return bool
*/
function isOk()
{
- return ($this->getStatus() == 200);
+ $status = $this->getStatus();
+ return ($status >= 200 && $status < 300);
}
}
diff --git a/lib/mysqlschema.php b/lib/mysqlschema.php
index 1f7c3d092..485096ac4 100644
--- a/lib/mysqlschema.php
+++ b/lib/mysqlschema.php
@@ -213,6 +213,7 @@ class MysqlSchema extends Schema
$sql .= "); ";
+ common_log(LOG_INFO, $sql);
$res = $this->conn->query($sql);
if (PEAR::isError($res)) {
diff --git a/lib/queuemanager.php b/lib/queuemanager.php
index 274e1c2f6..64bb52e10 100644
--- a/lib/queuemanager.php
+++ b/lib/queuemanager.php
@@ -155,26 +155,26 @@ abstract class QueueManager extends IoManager
}
/**
- * Encode an object for queued storage.
- * Next gen may use serialization.
+ * Encode an object or variable for queued storage.
+ * Notice objects are currently stored as an id reference;
+ * other items are serialized.
*
- * @param mixed $object
+ * @param mixed $item
* @return string
*/
- protected function encode($object)
+ protected function encode($item)
{
- if ($object instanceof Notice) {
- return $object->id;
- } else if (is_string($object)) {
- return $object;
+ if ($item instanceof Notice) {
+ // Backwards compat
+ return $item->id;
} else {
- throw new ServerException("Can't queue this type", 500);
+ return serialize($item);
}
}
/**
* Decode an object from queued storage.
- * Accepts back-compat notice reference entries and strings for now.
+ * Accepts notice reference entries and serialized items.
*
* @param string
* @return mixed
@@ -182,9 +182,23 @@ abstract class QueueManager extends IoManager
protected function decode($frame)
{
if (is_numeric($frame)) {
+ // Back-compat for notices...
return Notice::staticGet(intval($frame));
- } else {
+ } elseif (substr($frame, 0, 1) == '<') {
+ // Back-compat for XML source
return $frame;
+ } else {
+ // Deserialize!
+ #$old = error_reporting();
+ #error_reporting($old & ~E_NOTICE);
+ $out = unserialize($frame);
+ #error_reporting($old);
+
+ if ($out === false && $frame !== 'b:0;') {
+ common_log(LOG_ERR, "Couldn't unserialize queued frame: $frame");
+ return false;
+ }
+ return $out;
}
}
diff --git a/lib/right.php b/lib/right.php
index 5e66eae0e..4e9c5a918 100644
--- a/lib/right.php
+++ b/lib/right.php
@@ -57,5 +57,6 @@ class Right
const EMAILONREPLY = 'emailonreply';
const EMAILONSUBSCRIBE = 'emailonsubscribe';
const EMAILONFAVE = 'emailonfave';
+ const MAKEGROUPADMIN = 'makegroupadmin';
}
diff --git a/lib/spawningdaemon.php b/lib/spawningdaemon.php
index b1961d688..862cbb4fa 100644
--- a/lib/spawningdaemon.php
+++ b/lib/spawningdaemon.php
@@ -83,6 +83,7 @@ abstract class SpawningDaemon extends Daemon
$this->log(LOG_INFO, "Spawned thread $i as pid $pid");
$children[$i] = $pid;
}
+ sleep(common_config('queue', 'spawndelay'));
}
$this->log(LOG_INFO, "Waiting for children to complete.");
@@ -111,6 +112,7 @@ abstract class SpawningDaemon extends Daemon
$this->log(LOG_INFO, "Respawned thread $i as pid $pid");
$children[$i] = $pid;
}
+ sleep(common_config('queue', 'spawndelay'));
} else {
$this->log(LOG_INFO, "Thread $i pid $pid exited with status $exitCode; closing out thread.");
}
diff --git a/lib/statusnet.php b/lib/statusnet.php
index beeb26ccc..4f82fdaa6 100644
--- a/lib/statusnet.php
+++ b/lib/statusnet.php
@@ -30,6 +30,7 @@ global $config, $_server, $_path;
class StatusNet
{
protected static $have_config;
+ protected static $is_api;
/**
* Configure and instantiate a plugin into the current configuration.
@@ -147,6 +148,16 @@ class StatusNet
return self::$have_config;
}
+ public function isApi()
+ {
+ return self::$is_api;
+ }
+
+ public function setApi($mode)
+ {
+ self::$is_api = $mode;
+ }
+
/**
* Build default configuration array
* @return array
diff --git a/lib/stompqueuemanager.php b/lib/stompqueuemanager.php
index 6730cd213..cd62c25bd 100644
--- a/lib/stompqueuemanager.php
+++ b/lib/stompqueuemanager.php
@@ -107,9 +107,10 @@ class StompQueueManager extends QueueManager
$message .= ':' . $param;
}
$this->_connect();
- $result = $this->_send($this->control,
- $message,
- array ('created' => common_sql_now()));
+ $con = $this->cons[$this->defaultIdx];
+ $result = $con->send($this->control,
+ $message,
+ array ('created' => common_sql_now()));
if ($result) {
$this->_log(LOG_INFO, "Sent control ping to queue daemons: $message");
return true;
@@ -368,17 +369,10 @@ class StompQueueManager extends QueueManager
foreach ($this->cons as $i => $con) {
if ($con) {
$this->rollback($i);
- $con->unsubscribe($this->control);
+ $con->disconnect();
+ $this->cons[$i] = null;
}
}
- if ($this->sites) {
- foreach ($this->sites as $server) {
- StatusNet::init($server);
- $this->doUnsubscribe();
- }
- } else {
- $this->doUnsubscribe();
- }
return true;
}
@@ -555,26 +549,14 @@ class StompQueueManager extends QueueManager
}
$host = $this->cons[$idx]->getServer();
- if (is_numeric($frame->body)) {
- $id = intval($frame->body);
- $info = "notice $id posted at {$frame->headers['created']} in queue $queue from $host";
-
- $notice = Notice::staticGet('id', $id);
- if (empty($notice)) {
- $this->_log(LOG_WARNING, "Skipping missing $info");
- $this->ack($idx, $frame);
- $this->commit($idx);
- $this->begin($idx);
- $this->stats('badnotice', $queue);
- return false;
- }
-
- $item = $notice;
- } else {
- // @fixme should we serialize, or json, or what here?
- $info = "string posted at {$frame->headers['created']} in queue $queue from $host";
- $item = $frame->body;
+ $item = $this->decode($frame->body);
+ if (empty($item)) {
+ $this->_log(LOG_ERR, "Skipping empty or deleted item in queue $queue from $host");
+ return true;
}
+ $info = $this->logrep($item) . " posted at " .
+ $frame->headers['created'] . " in queue $queue from $host";
+ $this->_log(LOG_DEBUG, "Dequeued $info");
$handler = $this->getHandler($queue);
if (!$handler) {
diff --git a/lib/util.php b/lib/util.php
index 9e8ac26ad..8c46f5e35 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -367,7 +367,8 @@ function common_current_user()
if ($_cur === false) {
- if (isset($_REQUEST[session_name()]) || (isset($_SESSION['userid']) && $_SESSION['userid'])) {
+ if (isset($_COOKIE[session_name()]) || isset($_GET[session_name()])
+ || (isset($_SESSION['userid']) && $_SESSION['userid'])) {
common_ensure_session();
$id = isset($_SESSION['userid']) ? $_SESSION['userid'] : false;
if ($id) {
@@ -658,6 +659,9 @@ function common_valid_profile_tag($str)
function common_at_link($sender_id, $nickname)
{
$sender = Profile::staticGet($sender_id);
+ if (!$sender) {
+ return $nickname;
+ }
$recipient = common_relative_profile($sender, common_canonical_nickname($nickname));
if ($recipient) {
$user = User::staticGet('id', $recipient->id);
@@ -687,7 +691,7 @@ function common_group_link($sender_id, $nickname)
{
$sender = Profile::staticGet($sender_id);
$group = User_group::getForNickname($nickname);
- if ($group && $sender->isMember($group)) {
+ if ($sender && $group && $sender->isMember($group)) {
$attrs = array('href' => $group->permalink(),
'class' => 'url');
if (!empty($group->fullname)) {
diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po
index 00eac9b28..c7276b56f 100644
--- a/locale/ar/LC_MESSAGES/statusnet.po
+++ b/locale/ar/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:32+0000\n"
+"POT-Creation-Date: 2010-02-14 20:05+0000\n"
+"PO-Revision-Date: 2010-02-14 20:05:58+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n"
@@ -26,14 +26,12 @@ msgid "Access"
msgstr "Ù†Ùاذ"
#: actions/accessadminpanel.php:65
-#, fuzzy
msgid "Site access settings"
-msgstr "اذ٠إعدادت الموقع"
+msgstr "إعدادات الوصول إلى الموقع"
#: actions/accessadminpanel.php:158
-#, fuzzy
msgid "Registration"
-msgstr "سجّل"
+msgstr "تسجيل"
#: actions/accessadminpanel.php:161
msgid "Private"
@@ -72,9 +70,8 @@ msgid "Save"
msgstr "أرسل"
#: actions/accessadminpanel.php:189
-#, fuzzy
msgid "Save access settings"
-msgstr "اذ٠إعدادت الموقع"
+msgstr "Ø­Ùظ إعدادت الوصول"
#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
#: actions/showfavorites.php:137 actions/tag.php:51
@@ -165,8 +162,8 @@ msgstr ""
msgid "You and friends"
msgstr "أنت والأصدقاء"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -187,12 +184,12 @@ msgstr ""
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
msgid "API method not found."
msgstr "لم يتم العثور على وسيلة API."
@@ -280,7 +277,7 @@ msgstr "رسائل مباشرة من %s"
#: actions/apidirectmessage.php:93
#, php-format
msgid "All the direct messages sent from %s"
-msgstr ""
+msgstr "جميع الرسائل المرسلة من %s"
#: actions/apidirectmessage.php:101
#, php-format
@@ -353,7 +350,7 @@ msgstr ""
#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
-msgstr ""
+msgstr "تعذّر تحديد المستخدم المصدر."
#: actions/apifriendshipsshow.php:142
msgid "Could not find target user."
@@ -369,7 +366,7 @@ msgstr ""
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
-msgstr ""
+msgstr "الاسم المستعار مستخدم بالÙعل. جرّب اسمًا آخرًا."
#: actions/apigroupcreate.php:180 actions/editgroup.php:189
#: actions/newgroup.php:133 actions/profilesettings.php:218
@@ -406,7 +403,7 @@ msgstr ""
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
-msgstr ""
+msgstr "كنيات كيرة! العدد الأقصى هو %d."
#: actions/apigroupcreate.php:264 actions/editgroup.php:224
#: actions/newgroup.php:168
@@ -446,7 +443,7 @@ msgstr "لم يمكن ضم المستخدم %1$s إلى المجموعة %2$s."
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
-msgstr ""
+msgstr "لست عضوًا ÙÙŠ هذه المجموعة"
#: actions/apigroupleave.php:124 actions/leavegroup.php:119
#, php-format
@@ -628,7 +625,7 @@ msgstr "نسق غير مدعوم."
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -639,7 +636,7 @@ msgstr ""
msgid "%s timeline"
msgstr "مسار %s الزمني"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
#: actions/userrss.php:92
#, php-format
msgid "Updates from %1$s on %2$s!"
@@ -655,12 +652,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "مسار %s الزمني العام"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -670,7 +667,7 @@ msgstr ""
msgid "Repeated to %s"
msgstr "كرر إلى %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "تكرارات %s"
@@ -680,7 +677,7 @@ msgstr "تكرارات %s"
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومة ب%s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -804,7 +801,7 @@ msgstr "لا تمنع هذا المستخدم"
msgid "Yes"
msgstr "نعم"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "امنع هذا المستخدم"
@@ -1217,7 +1214,7 @@ msgstr ""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعة."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:259 classes/User_group.php:423
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@@ -1550,7 +1547,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr "المستخدم ليس عضوًا ÙÙŠ المجموعة."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "امنع المستخدم من المجموعة"
@@ -1645,19 +1642,19 @@ msgstr "قائمة بمستخدمي هذه المجموعة."
msgid "Admin"
msgstr "إداري"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "امنع"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "اجعل هذا المستخدم إداريًا"
@@ -2005,21 +2002,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "لم يمكن الحصول على تسجيل العضوية Ù„%1$s ÙÙŠ المجموعة %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "لم يمكن جعل %1$s إداريا للمجموعة %2$s."
@@ -2214,8 +2211,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "ليس نسق بيانات مدعوم."
@@ -2544,7 +2541,7 @@ msgstr "إعدادات المل٠الشخصي"
#: actions/profilesettings.php:71
msgid ""
"You can update your personal profile info here so people know more about you."
-msgstr ""
+msgstr "بإمكانك تحديث بيانات ملÙÙƒ الشخصي ليعر٠عنك الناس أكثر."
#: actions/profilesettings.php:99
msgid "Profile information"
@@ -2567,12 +2564,12 @@ msgstr "الصÙحة الرئيسية"
#: actions/profilesettings.php:117 actions/register.php:455
msgid "URL of your homepage, blog, or profile on another site"
-msgstr ""
+msgstr "مسار صÙحتك الرئيسية أو مدونتك أو ملÙÙƒ الشخصي على موقع آخر"
#: actions/profilesettings.php:122 actions/register.php:461
#, php-format
msgid "Describe yourself and your interests in %d chars"
-msgstr ""
+msgstr "تكلم عن Ù†Ùسك واهتمامتك ÙÙŠ %d حرÙ"
#: actions/profilesettings.php:125 actions/register.php:464
msgid "Describe yourself and your interests"
@@ -2591,7 +2588,7 @@ msgstr "الموقع"
#: actions/profilesettings.php:134 actions/register.php:473
msgid "Where you are, like \"City, State (or Region), Country\""
-msgstr ""
+msgstr "مكان تواجدك، على سبيل المثال \"المدينة، الولاية (أو المنطقة)، الدولة\""
#: actions/profilesettings.php:138
msgid "Share my current location when posting notices"
@@ -2607,6 +2604,7 @@ msgstr "الوسوم"
msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
+"سÙÙ… Ù†Ùسك (حرو٠وأرقام Ùˆ \"-\" Ùˆ \".\" Ùˆ \"_\")ØŒ اÙصلها بÙاصلة (',') أو مساÙØ©."
#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
msgid "Language"
@@ -2627,7 +2625,7 @@ msgstr "ما المنطقة الزمنية التي تتواجد Ùيها عاد
#: actions/profilesettings.php:167
msgid ""
"Automatically subscribe to whoever subscribes to me (best for non-humans)"
-msgstr ""
+msgstr "اشترك تلقائيًا بأي شخص يشترك بي (ÙŠÙضل أن يستخدم لغير البشر)"
#: actions/profilesettings.php:228 actions/register.php:223
#, php-format
@@ -4246,7 +4244,7 @@ msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
msgid "DB error inserting reply: %s"
msgstr ""
-#: classes/Notice.php:1231
+#: classes/Notice.php:1271
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s"
@@ -4256,11 +4254,11 @@ msgstr "آر تي @%1$s %2$s"
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم ÙÙŠ %1$s يا @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:413
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعة."
-#: classes/User_group.php:409
+#: classes/User_group.php:442
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضوية المجموعة."
@@ -5802,47 +5800,47 @@ msgstr "رسالة"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:871
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:869
+#: lib/util.php:873
msgid "about a minute ago"
msgstr "قبل دقيقة تقريبًا"
-#: lib/util.php:871
+#: lib/util.php:875
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:873
+#: lib/util.php:877
msgid "about an hour ago"
msgstr "قبل ساعة تقريبًا"
-#: lib/util.php:875
+#: lib/util.php:879
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:881
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:879
+#: lib/util.php:883
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:885
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:883
+#: lib/util.php:887
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:889
msgid "about a year ago"
msgstr "قبل سنة تقريبًا"
diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po
index e1c638a6c..2940486d8 100644
--- a/locale/arz/LC_MESSAGES/statusnet.po
+++ b/locale/arz/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Egyptian Spoken Arabic
#
+# Author@translatewiki.net: Dudi
# Author@translatewiki.net: Ghaly
# Author@translatewiki.net: Meno25
# --
@@ -9,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:37+0000\n"
+"POT-Creation-Date: 2010-02-14 20:05+0000\n"
+"PO-Revision-Date: 2010-02-14 20:06:01+0000\n"
"Language-Team: Egyptian Spoken Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n"
@@ -110,7 +111,7 @@ msgstr "لا مستخدم كهذا."
#: actions/all.php:84
#, php-format
msgid "%1$s and friends, page %2$d"
-msgstr "%1$s والأصدقاء, الصÙحه %2$d"
+msgstr "%1$s Ùˆ الصحاب, صÙحه %2$d"
#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
@@ -165,8 +166,8 @@ msgstr ""
msgid "You and friends"
msgstr "أنت والأصدقاء"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -187,12 +188,12 @@ msgstr ""
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
msgid "API method not found."
msgstr "لم يتم العثور على وسيله API."
@@ -316,7 +317,7 @@ msgstr ""
#: actions/apifavoritecreate.php:119
msgid "This status is already a favorite."
-msgstr "هذه الحاله Ù…Ùضله بالÙعل."
+msgstr "الحاله دى موجوده Ùعلا ÙÙ‰ التÙضيلات."
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
@@ -324,7 +325,7 @@ msgstr "تعذّر إنشاء Ù…Ùضله."
#: actions/apifavoritedestroy.php:122
msgid "That status is not a favorite."
-msgstr "تلك الحاله ليست Ù…Ùضله."
+msgstr "الحاله دى مش محطوطه ÙÙ‰ التÙضيلات."
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -345,7 +346,7 @@ msgstr ""
#: actions/apifriendshipsdestroy.php:120
msgid "You cannot unfollow yourself."
-msgstr "لا يمكنك عدم متابعه Ù†Ùسك."
+msgstr "ما ينÙعش عدم متابعة Ù†Ùسك."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
@@ -442,7 +443,7 @@ msgstr ""
#: actions/apigroupjoin.php:138 actions/joingroup.php:124
#, php-format
msgid "Could not join user %1$s to group %2$s."
-msgstr "لم يمكن ضم المستخدم %1$s إلى المجموعه %2$s."
+msgstr "ما Ù†Ùعش يضم %1$s للجروپ %2$s."
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
@@ -451,7 +452,7 @@ msgstr ""
#: actions/apigroupleave.php:124 actions/leavegroup.php:119
#, php-format
msgid "Could not remove user %1$s from group %2$s."
-msgstr "لم يمكن إزاله المستخدم %1$s من المجموعه %2$s."
+msgstr "ما Ù†Ùعش يتشال اليوزر %1$s من الجروپ %2$s."
#: actions/apigrouplist.php:95
#, php-format
@@ -497,7 +498,7 @@ msgstr ""
#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "اسم/كلمه سر غير صحيحة!"
+msgstr "نيكنيم / پاسوورد مش مظبوطه!"
#: actions/apioauthauthorize.php:159
#, fuzzy
@@ -628,7 +629,7 @@ msgstr "نسق غير مدعوم."
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -639,7 +640,7 @@ msgstr ""
msgid "%s timeline"
msgstr "مسار %s الزمني"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
#: actions/userrss.php:92
#, php-format
msgid "Updates from %1$s on %2$s!"
@@ -655,12 +656,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "مسار %s الزمنى العام"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -670,7 +671,7 @@ msgstr ""
msgid "Repeated to %s"
msgstr "كرر إلى %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "تكرارات %s"
@@ -680,7 +681,7 @@ msgstr "تكرارات %s"
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومه ب%s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -804,7 +805,7 @@ msgstr "لا تمنع هذا المستخدم"
msgid "Yes"
msgstr "نعم"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "امنع هذا المستخدم"
@@ -830,7 +831,7 @@ msgstr ""
#: actions/blockedfromgroup.php:93
#, php-format
msgid "%1$s blocked profiles, page %2$d"
-msgstr "%1$s ملÙات ممنوعة, الصÙحه %2$d"
+msgstr "%1$s Ùايلات معمول ليها بلوك, الصÙحه %2$d"
#: actions/blockedfromgroup.php:108
msgid "A list of the users blocked from joining this group."
@@ -888,7 +889,7 @@ msgstr "تعذّر حذ٠تأكيد البريد الإلكترونى."
#: actions/confirmaddress.php:144
msgid "Confirm address"
-msgstr "أكد العنوان"
+msgstr "اكد العنوان"
#: actions/confirmaddress.php:159
#, php-format
@@ -917,7 +918,7 @@ msgstr "لم يوجد رمز التأكيد."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
msgid "You are not the owner of this application."
-msgstr "أنت لست مالك هذا التطبيق."
+msgstr "انت مش بتملك الapplication دى."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1131,16 +1132,16 @@ msgstr "تطبيقات OAuth"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
-msgstr "يجب أن تكون مسجل الدخول لتعدل تطبيقا."
+msgstr "لازم يكون متسجل دخولك علشان تعدّل application."
#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
-msgstr "لا تطبيق كهذا."
+msgstr "ما Ùيش application زى كده."
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
-msgstr "استخدم النموذج ده علشان تعدل تطبيقك."
+msgstr "استعمل الÙورمه دى علشان تعدّل الapplication بتاعتك."
#: actions/editapplication.php:177 actions/newapplication.php:159
msgid "Name is required."
@@ -1148,7 +1149,7 @@ msgstr "الاسم مطلوب."
#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "الاسم طويل جدا (الأقصى 255 حرÙا)."
+msgstr "الاسم طويل جدا (اكتر حاجه 255 رمز)."
#: actions/editapplication.php:183 actions/newapplication.php:162
msgid "Name already in use. Try another one."
@@ -1164,7 +1165,7 @@ msgstr ""
#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "مسار المصدر ليس صحيحا."
+msgstr "الSource URL مش مظبوط."
#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
@@ -1172,7 +1173,7 @@ msgstr ""
#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "المنظمه طويله جدا (الأقصى 255 حرÙا)."
+msgstr "المنظمه طويله جدا (اكتر حاجه 255 رمز)."
#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
@@ -1188,7 +1189,7 @@ msgstr ""
#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "لم يمكن تحديث التطبيق."
+msgstr "ما Ù†Ùعش تحديث الapplication."
#: actions/editgroup.php:56
#, php-format
@@ -1202,7 +1203,7 @@ msgstr "يجب أن تكون والجًا لتنشئ مجموعه."
#: actions/editgroup.php:103 actions/editgroup.php:168
#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
msgid "You must be an admin to edit the group."
-msgstr "يجب أن تكون إداريا لتعدل المجموعه."
+msgstr "لازم تكون ادارى علشان تعدّل الجروپ."
#: actions/editgroup.php:154
msgid "Use this form to edit the group."
@@ -1217,7 +1218,7 @@ msgstr ""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعه."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:259 classes/User_group.php:423
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@@ -1227,7 +1228,7 @@ msgstr "Ø­ÙÙظت الخيارات."
#: actions/emailsettings.php:60
msgid "Email settings"
-msgstr "إعدادات البريد الإلكتروني"
+msgstr "تظبيطات الايميل"
#: actions/emailsettings.php:71
#, php-format
@@ -1263,7 +1264,7 @@ msgstr "ألغÙ"
#: actions/emailsettings.php:121
msgid "Email address"
-msgstr "عنوان البريد الإلكتروني"
+msgstr "عنوان الايميل"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1550,7 +1551,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr "المستخدم ليس عضوًا ÙÙ‰ المجموعه."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "امنع المستخدم من المجموعة"
@@ -1613,7 +1614,7 @@ msgstr ""
#: actions/grouplogo.php:178
msgid "User without matching profile."
-msgstr "المستخدم بدون مل٠مطابق."
+msgstr "يوزر من-غير پروÙايل زيّه."
#: actions/grouplogo.php:362
msgid "Pick a square area of the image to be the logo."
@@ -1635,7 +1636,7 @@ msgstr "أعضاء مجموعه %s"
#: actions/groupmembers.php:96
#, php-format
msgid "%1$s group members, page %2$d"
-msgstr "%1$s أعضاء المجموعة, الصÙحه %2$d"
+msgstr "%1$s اعضاء الجروپ, صÙحه %2$d"
#: actions/groupmembers.php:111
msgid "A list of the users in this group."
@@ -1645,19 +1646,19 @@ msgstr "قائمه بمستخدمى هذه المجموعه."
msgid "Admin"
msgstr "إداري"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "امنع"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "اجعل هذا المستخدم إداريًا"
@@ -1734,7 +1735,7 @@ msgstr "خطأ أثناء منع الحجب."
#: actions/imsettings.php:59
msgid "IM settings"
-msgstr "إعدادات المراسله الÙورية"
+msgstr "تظبيطات بعت الرسايل الÙوريه"
#: actions/imsettings.php:70
#, php-format
@@ -1760,7 +1761,7 @@ msgstr ""
#: actions/imsettings.php:124
msgid "IM address"
-msgstr "عنوان المراسله الÙورية"
+msgstr "عنوان الرساله الÙوريه"
#: actions/imsettings.php:126
#, php-format
@@ -1944,7 +1945,7 @@ msgstr ""
#: actions/joingroup.php:131
#, php-format
msgid "%1$s joined group %2$s"
-msgstr "%1$s انضم للمجموعه %2$s"
+msgstr "%1$s دخل جروپ %2$s"
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
@@ -1957,7 +1958,7 @@ msgstr "لست عضوا ÙÙ‰ تلك المجموعه."
#: actions/leavegroup.php:127
#, php-format
msgid "%1$s left group %2$s"
-msgstr "%1$s ترك المجموعه %2$s"
+msgstr "%1$s ساب جروپ %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -2005,24 +2006,24 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "لم يمكن الحصول على تسجيل العضويه Ù„%1$s ÙÙ‰ المجموعه %2$s."
+msgstr "مش ناÙع يتجاب سجل العضويه لـ%1$s ÙÙ‰ جروپ %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "لم يمكن جعل %1$s إداريا للمجموعه %2$s."
+msgstr "%1$s مش ناÙع يبقى ادارى لجروپ %2$s."
#: actions/microsummary.php:69
msgid "No current status"
@@ -2035,11 +2036,11 @@ msgstr "لا تطبيق كهذا."
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
-msgstr "يجب أن تكون مسجل الدخول لتسجل تطبيقا."
+msgstr "لازم تكون مسجل دخوللك علشان تسجل application."
#: actions/newapplication.php:143
msgid "Use this form to register a new application."
-msgstr "استخدم هذا النموذج لتسجل تطبيقا جديدا."
+msgstr "استعمل الÙورمه دى علشان تسجل application جديد."
#: actions/newapplication.php:176
msgid "Source URL is required."
@@ -2047,7 +2048,7 @@ msgstr ""
#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "مش ممكن إنشاء التطبيق."
+msgstr "مش ممكن إنشاء الapplication."
#: actions/newgroup.php:53
msgid "New group"
@@ -2086,7 +2087,7 @@ msgstr "Ø£Ùرسلت الرسالة"
#: actions/newmessage.php:185
#, php-format
msgid "Direct message to %s sent."
-msgstr "رساله مباشره ل%s تم إرسالها."
+msgstr "رساله مباشره اتبعتت لـ%s."
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
@@ -2114,7 +2115,7 @@ msgstr "بحث ÙÙ‰ النصوص"
#: actions/noticesearch.php:91
#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "نتائج البحث ل\"%1$s\" على %2$s"
+msgstr "نتايج التدوير لـ\"%1$s\" على %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2155,11 +2156,11 @@ msgstr "Ø£Ùرسل التنبيه!"
#: actions/oauthappssettings.php:59
msgid "You must be logged in to list your applications."
-msgstr "يجب أن تكون مسجل الدخول لعرض تطبيقاتك."
+msgstr "لازم تكون مسجل دخولك علشان تشو٠ليستة الapplications بتاعتك."
#: actions/oauthappssettings.php:74
msgid "OAuth applications"
-msgstr "تطبيقات OAuth"
+msgstr "OAuth applications"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
@@ -2180,7 +2181,7 @@ msgstr ""
#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "أنت لست مستخدما لهذا التطبيق."
+msgstr "انت مش يوزر للapplication دى."
#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
@@ -2212,8 +2213,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr " مش نظام بيانات مدعوم."
@@ -2227,7 +2228,7 @@ msgstr "بحث الإشعارات"
#: actions/othersettings.php:60
msgid "Other settings"
-msgstr "إعدادات تانيه"
+msgstr "تظبيطات تانيه"
#: actions/othersettings.php:71
msgid "Manage various other options."
@@ -2259,23 +2260,23 @@ msgstr ""
#: actions/otp.php:69
msgid "No user ID specified."
-msgstr "لا هويه مستخدم محدده."
+msgstr "ما Ùيش ID متحدد لليوزر."
#: actions/otp.php:83
msgid "No login token specified."
-msgstr "لا محتوى دخول محدد."
+msgstr "ما Ùيش امارة دخول متحدده."
#: actions/otp.php:90
msgid "No login token requested."
-msgstr "لا طلب استيثاق."
+msgstr "ما Ùيش طلب تسجيل دخول مطلوب."
#: actions/otp.php:95
msgid "Invalid login token specified."
-msgstr "توكن دخول غير صحيح محدد."
+msgstr "امارة تسجيل الدخول اللى اتحطت مش موجوده."
#: actions/otp.php:104
msgid "Login token expired."
-msgstr "توكن الدخول انتهى."
+msgstr "تاريخ صلاحية الاماره خلص."
#: actions/outbox.php:58
#, php-format
@@ -2495,7 +2496,7 @@ msgstr ""
#: actions/pathsadminpanel.php:335
msgid "SSL server"
-msgstr "خادم SSL"
+msgstr "SSL server"
#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
@@ -3118,7 +3119,7 @@ msgstr ""
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
-msgstr "ستاتس نت"
+msgstr "StatusNet"
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
@@ -3161,7 +3162,7 @@ msgstr "اذ٠إعدادت الموقع"
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
-msgstr "يجب أن تكون مسجل الدخول لرؤيه تطبيق."
+msgstr "لازم تكون مسجل دخولك علشان تشو٠اى application."
#: actions/showapplication.php:157
msgid "Application profile"
@@ -3178,7 +3179,7 @@ msgstr "الاسم"
#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "المنظمة"
+msgstr "المنظمه"
#: actions/showapplication.php:187 actions/version.php:198
#: lib/applicationeditform.php:209 lib/groupeditform.php:172
@@ -3225,7 +3226,7 @@ msgstr ""
#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr "اسمح بالمسار"
+msgstr "اسمح للURL"
#: actions/showapplication.php:288
msgid ""
@@ -3499,12 +3500,12 @@ msgstr "يجب ألا يكون طول اسم الموقع صÙرًا."
#: actions/siteadminpanel.php:140
msgid "You must have a valid contact email address."
-msgstr "يجب أن تملك عنوان بريد إلكترونى صحيح."
+msgstr "لازم يكون عندك عنوان ايميل صالح."
#: actions/siteadminpanel.php:158
#, php-format
msgid "Unknown language \"%s\"."
-msgstr "لغه غير معروÙÙ‡ \"%s\"."
+msgstr "لغه مش معروÙÙ‡ \"%s\"."
#: actions/siteadminpanel.php:165
msgid "Invalid snapshot report URL."
@@ -3632,7 +3633,7 @@ msgstr ""
#: actions/smssettings.php:58
msgid "SMS settings"
-msgstr "إعدادات الرسائل القصيرة"
+msgstr "تظبيطات الـSMS"
#: actions/smssettings.php:69
#, php-format
@@ -3661,7 +3662,7 @@ msgstr ""
#: actions/smssettings.php:138
msgid "SMS phone number"
-msgstr "رقم هات٠SMS"
+msgstr "نمرة تليÙون الـSMS"
#: actions/smssettings.php:140
msgid "Phone number, no punctuation or spaces, with area code"
@@ -3746,7 +3747,7 @@ msgstr "مشتركو %s"
#: actions/subscribers.php:52
#, php-format
msgid "%1$s subscribers, page %2$d"
-msgstr "مشتركو %1$s, الصÙحه %2$d"
+msgstr "%1$s مشتركين, صÙحه %2$d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
@@ -3783,7 +3784,7 @@ msgstr "اشتراكات %s"
#: actions/subscriptions.php:54
#, php-format
msgid "%1$s subscriptions, page %2$d"
-msgstr "اشتراكات%1$s, الصÙحه %2$d"
+msgstr "%1$s اشتراكات, صÙحه %2$d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
@@ -4108,7 +4109,7 @@ msgstr ""
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
-msgstr "ستاتس نت %s"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4150,11 +4151,11 @@ msgstr ""
#: actions/version.php:196 lib/action.php:747
msgid "Version"
-msgstr "النسخة"
+msgstr "النسخه"
#: actions/version.php:197
msgid "Author(s)"
-msgstr "المؤلÙ(ون)"
+msgstr "المؤلÙ/ين"
#: classes/File.php:144
#, php-format
@@ -4175,15 +4176,15 @@ msgstr ""
#: classes/Group_member.php:41
msgid "Group join failed."
-msgstr "الانضمام للمجموعه Ùشل."
+msgstr "دخول الجروپ Ùشل."
#: classes/Group_member.php:53
msgid "Not part of group."
-msgstr "ليس جزءا من المجموعه."
+msgstr "مش جزء من الجروپ."
#: classes/Group_member.php:60
msgid "Group leave failed."
-msgstr "ترك المجموعه Ùشل."
+msgstr "الخروج من الجروپ Ùشل."
#: classes/Login_token.php:76
#, php-format
@@ -4244,7 +4245,7 @@ msgstr "مشكله أثناء Ø­Ùظ الإشعار."
msgid "DB error inserting reply: %s"
msgstr ""
-#: classes/Notice.php:1231
+#: classes/Notice.php:1271
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s"
@@ -4254,11 +4255,11 @@ msgstr "آر تى @%1$s %2$s"
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم ÙÙ‰ %1$s يا @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:413
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعه."
-#: classes/User_group.php:409
+#: classes/User_group.php:442
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضويه المجموعه."
@@ -4485,7 +4486,7 @@ msgstr ""
#: lib/adminpanelaction.php:107
msgid "Changes to that panel are not allowed."
-msgstr "التغييرات لهذه اللوحه غير مسموح بها."
+msgstr "التغييرات مش مسموحه للـ لوحه دى."
#: lib/adminpanelaction.php:206
msgid "showForm() not implemented."
@@ -4550,11 +4551,11 @@ msgstr ""
#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "اوص٠تطبيقك"
+msgstr "اوص٠الapplication بتاعتك"
#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "مسار المصدر"
+msgstr "Source URL"
#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
@@ -4598,7 +4599,7 @@ msgstr ""
#: lib/applicationlist.php:154
msgid "Revoke"
-msgstr "اسحب"
+msgstr "بطّل"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4622,11 +4623,11 @@ msgstr "وسوم هذا المرÙÙ‚"
#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
msgid "Password changing failed"
-msgstr "تغيير كلمه السر Ùشل"
+msgstr "تغيير الپاسوورد Ùشل"
#: lib/authenticationplugin.php:233
msgid "Password changing is not allowed"
-msgstr "تغيير كلمه السر غير مسموح به"
+msgstr "تغيير الپاسوورد مش مسموح"
#: lib/channel.php:138 lib/channel.php:158
msgid "Command results"
@@ -4647,7 +4648,7 @@ msgstr ""
#: lib/command.php:88
#, php-format
msgid "Could not find a user with nickname %s"
-msgstr "لم يمكن إيجاد مستخدم بالاسم %s"
+msgstr "ما Ù†Ùعش يلاقى يوزر بإسم %s"
#: lib/command.php:92
msgid "It does not make a lot of sense to nudge yourself!"
@@ -4656,7 +4657,7 @@ msgstr ""
#: lib/command.php:99
#, php-format
msgid "Nudge sent to %s"
-msgstr "التنبيه تم إرساله إلى %s"
+msgstr "Nudge اتبعتت لـ %s"
#: lib/command.php:126
#, php-format
@@ -4671,7 +4672,7 @@ msgstr ""
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
msgid "Notice with that id does not exist"
-msgstr "الملاحظه بهذا الرقم غير موجودة"
+msgstr "الملاحظه بالـID ده مالهاش وجود"
#: lib/command.php:168 lib/command.php:406 lib/command.php:467
#: lib/command.php:523
@@ -4684,12 +4685,12 @@ msgstr ""
#: lib/command.php:217
msgid "You are already a member of that group"
-msgstr "أنت بالÙعل عضو ÙÙ‰ هذه المجموعة"
+msgstr "انت اصلا عضو ÙÙ‰ الجروپ ده"
#: lib/command.php:231
#, php-format
msgid "Could not join user %s to group %s"
-msgstr "لم يمكن ضم المستخدم %s إلى المجموعه %s"
+msgstr "ما Ù†Ùعش يدخل اليوزر %s لجروپ %s"
#: lib/command.php:236
#, php-format
@@ -4699,12 +4700,12 @@ msgstr "%s انضم إلى مجموعه %s"
#: lib/command.php:275
#, php-format
msgid "Could not remove user %s to group %s"
-msgstr "لم يمكن إزاله المستخدم %s من المجموعه %s"
+msgstr "ما Ù†Ùعش يشيل اليوزر %s لجروپ %s"
#: lib/command.php:280
#, php-format
msgid "%s left group %s"
-msgstr "%s ترك المجموعه %s"
+msgstr "%s ساب الجروپ %s"
#: lib/command.php:309
#, php-format
@@ -4734,7 +4735,7 @@ msgstr ""
#: lib/command.php:367
#, php-format
msgid "Direct message to %s sent"
-msgstr "رساله مباشره إلى %s تم إرسالها"
+msgstr "رساله مباشره اتبعتت لـ %s"
#: lib/command.php:369
msgid "Error sending direct message."
@@ -4742,7 +4743,7 @@ msgstr ""
#: lib/command.php:413
msgid "Cannot repeat your own notice"
-msgstr "لا يمكنك تكرار ملاحظتك الخاصة"
+msgstr "الملاحظه بتاعتك مش ناÙعه تتكرر"
#: lib/command.php:418
msgid "Already repeated that notice"
@@ -4931,7 +4932,7 @@ msgstr ""
#: lib/connectsettingsaction.php:120
msgid "Connections"
-msgstr "اتصالات"
+msgstr "كونيكشونات (Connections)"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
@@ -5127,7 +5128,7 @@ msgstr "[%s]"
#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
-msgstr "مصدر صندوق وارد غير معرو٠%d."
+msgstr "مصدر الـinbox مش معرو٠%d."
#: lib/joinform.php:114
msgid "Join"
@@ -5189,7 +5190,7 @@ msgstr ""
#: lib/mail.php:258
#, php-format
msgid "Bio: %s"
-msgstr "السيرة: %s"
+msgstr "عن Ù†Ùسك: %s"
#: lib/mail.php:286
#, php-format
@@ -5342,7 +5343,7 @@ msgstr ""
#: lib/mailhandler.php:228
#, php-format
msgid "Unsupported message type: %s"
-msgstr "نوع رساله غير مدعوم: %s"
+msgstr "نوع رساله مش مدعوم: %s"
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
@@ -5384,7 +5385,7 @@ msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
msgid "Could not determine file's MIME type."
-msgstr "لم يمكن تحديد نوع MIME للملÙ."
+msgstr "مش ناÙع يتحدد نوع الـMIME بتاع الÙايل."
#: lib/mediafile.php:270
#, php-format
@@ -5427,11 +5428,11 @@ msgstr "أرÙÙ‚ ملÙًا"
#: lib/noticeform.php:212
msgid "Share my location"
-msgstr "شارك موقعى"
+msgstr "اعمل مشاركه لمكانى"
#: lib/noticeform.php:215
msgid "Do not share my location"
-msgstr "لا تشارك موقعي"
+msgstr "ما تعملش مشاركه لمكانى"
#: lib/noticeform.php:216
msgid ""
@@ -5555,7 +5556,7 @@ msgstr ""
#: lib/plugin.php:114
msgid "Unknown"
-msgstr "غير معروÙ"
+msgstr "مش معروÙ"
#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
msgid "Subscriptions"
@@ -5790,47 +5791,47 @@ msgstr "رسالة"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:871
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:869
+#: lib/util.php:873
msgid "about a minute ago"
msgstr "قبل دقيقه تقريبًا"
-#: lib/util.php:871
+#: lib/util.php:875
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:873
+#: lib/util.php:877
msgid "about an hour ago"
msgstr "قبل ساعه تقريبًا"
-#: lib/util.php:875
+#: lib/util.php:879
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:881
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:879
+#: lib/util.php:883
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:885
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:883
+#: lib/util.php:887
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:889
msgid "about a year ago"
msgstr "قبل سنه تقريبًا"
diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po
index 3b60491ca..efe49b56a 100644
--- a/locale/bg/LC_MESSAGES/statusnet.po
+++ b/locale/bg/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:40+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:17+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"
@@ -30,7 +30,6 @@ msgid "Site access settings"
msgstr "Запазване наÑтройките на Ñайта"
#: actions/accessadminpanel.php:158
-#, fuzzy
msgid "Registration"
msgstr "РегиÑтриране"
@@ -107,9 +106,9 @@ msgid "No such user."
msgstr "ÐÑма такъв потребител"
#: actions/all.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s and friends, page %2$d"
-msgstr "Блокирани за %s, Ñтраница %d"
+msgstr "%1$s и приÑтели, Ñтраница %2$d"
#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
@@ -191,7 +190,7 @@ msgstr "Бележки от %1$s и приÑтели в %2$s."
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Ðе е открит методът в API."
@@ -425,9 +424,9 @@ msgstr "Ðеправилен пÑевдоним: \"%s\""
#: actions/apigroupcreate.php:273 actions/editgroup.php:228
#: actions/newgroup.php:172
-#, fuzzy, php-format
+#, php-format
msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Опитайте друг пÑевдоним, този вече е зает."
+msgstr "ПÑевдонимът \"%s\" вече е зает. Опитайте друг."
#: actions/apigroupcreate.php:286 actions/editgroup.php:234
#: actions/newgroup.php:178
@@ -817,7 +816,7 @@ msgstr "Да не Ñе блокира този потребител"
msgid "Yes"
msgstr "Да"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокиране на потребителÑ"
@@ -902,9 +901,8 @@ msgid "Couldn't delete email confirmation."
msgstr "Грешка при изтриване потвърждението по е-поща."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
-msgstr "Потвърждаване на адреÑа"
+msgstr "Потвърждаване на адреÑ"
#: actions/confirmaddress.php:159
#, php-format
@@ -1598,7 +1596,7 @@ msgstr "ПотребителÑÑ‚ вече е блокиран за групатÐ
msgid "User is not a member of group."
msgstr "ПотребителÑÑ‚ не членува в групата."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "Блокиране на потребителÑ"
@@ -1701,20 +1699,20 @@ msgstr "СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ в тази група."
msgid "Admin"
msgstr "ÐаÑтройки"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Блокиране"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
#, fuzzy
msgid "Make user an admin of the group"
msgstr "За да редактирате групата, Ñ‚Ñ€Ñбва да Ñте й админиÑтратор."
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2057,9 +2055,9 @@ msgid "You are not a member of that group."
msgstr "Ðе членувате в тази група."
#: actions/leavegroup.php:127
-#, fuzzy, php-format
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s напуÑна групата %s"
+msgstr "%1$s напуÑна групата %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -2112,21 +2110,21 @@ msgstr ""
"Влезте Ñ Ð¸Ð¼Ðµ и парола. ÐÑмате такива? [РегиÑтрирайте](%%action.register%%) "
"нова Ñметка или опитайте Ñ [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "ПотребителÑÑ‚ вече е блокиран за групата."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "За да редактирате групата, Ñ‚Ñ€Ñбва да Ñте й админиÑтратор."
@@ -2329,8 +2327,8 @@ msgstr "вид Ñъдържание "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Ðеподдържан формат на данните"
@@ -2343,7 +2341,6 @@ msgid "Notice Search"
msgstr "ТърÑене на бележки"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Други наÑтройки"
@@ -2619,7 +2616,6 @@ msgid "When to use SSL"
msgstr "Кога да Ñе използва SSL"
#: actions/pathsadminpanel.php:335
-#, fuzzy
msgid "SSL server"
msgstr "SSL-Ñървър"
@@ -3095,7 +3091,7 @@ msgid ""
msgstr " оÑвен тези лични данни: парола, е-поща, меÑинджър, телефон."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -3112,9 +3108,9 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"ПоздравлениÑ, %s! И добре дошли в %%%%site.name%%%%! от тук можете да...\n"
+"ПоздравлениÑ, %1$s! И добре дошли в %%%%site.name%%%%! от тук можете да...\n"
"\n"
-"* Отидете в [профила Ñи](%s) и да публикувате първата Ñи бележка.\n"
+"* Отидете в [профила Ñи](%2$s) и да публикувате първата Ñи бележка.\n"
"* Добавите [Ð°Ð´Ñ€ÐµÑ Ð² Jabber/GTalk](%%%%action.imsettings%%%%), за да "
"изпращате бележки от програмата Ñи за моментни ÑъобщениÑ.\n"
"* [ТърÑите хора](%%%%action.peoplesearch%%%%), които познавате или Ñ ÐºÐ¾Ð¸Ñ‚Ð¾ "
@@ -3328,18 +3324,16 @@ msgstr "Бележката нÑма профил"
#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Икона"
#: actions/showapplication.php:169 actions/version.php:195
#: lib/applicationeditform.php:195
-#, fuzzy
msgid "Name"
-msgstr "ПÑевдоним"
+msgstr "Име"
#: actions/showapplication.php:178 lib/applicationeditform.php:222
-#, fuzzy
msgid "Organization"
-msgstr "Страниране"
+msgstr "ОрганизациÑ"
#: actions/showapplication.php:187 actions/version.php:198
#: lib/applicationeditform.php:209 lib/groupeditform.php:172
@@ -3401,9 +3395,9 @@ msgid "Are you sure you want to reset your consumer key and secret?"
msgstr "ÐаиÑтина ли иÑкате да изтриете тази бележка?"
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s's favorite notices, page %2$d"
-msgstr "Любими бележки на %s"
+msgstr "Любими бележки на %1$s, Ñтраница %2$d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
@@ -3466,7 +3460,7 @@ msgstr "Профил на групата"
#: actions/showgroup.php:263 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
-msgstr ""
+msgstr "URL"
#: actions/showgroup.php:274 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
@@ -3475,7 +3469,7 @@ msgstr "Бележка"
#: actions/showgroup.php:284 lib/groupeditform.php:184
msgid "Aliases"
-msgstr ""
+msgstr "ПÑевдоними"
#: actions/showgroup.php:293
msgid "Group actions"
@@ -3661,9 +3655,9 @@ msgid "You must have a valid contact email address."
msgstr "ÐдреÑÑŠÑ‚ на е-поща за контакт е задължителен"
#: actions/siteadminpanel.php:158
-#, fuzzy, php-format
+#, php-format
msgid "Unknown language \"%s\"."
-msgstr "Ðепознат език \"%s\""
+msgstr "Ðепознат език \"%s\"."
#: actions/siteadminpanel.php:165
msgid "Invalid snapshot report URL."
@@ -4300,9 +4294,9 @@ msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
#: actions/version.php:73
-#, fuzzy, php-format
+#, php-format
msgid "StatusNet %s"
-msgstr "СтатиÑтики"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4340,17 +4334,15 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "ПриÑтавки"
#: actions/version.php:196 lib/action.php:747
-#, fuzzy
msgid "Version"
-msgstr "СеÑии"
+msgstr "ВерÑиÑ"
#: actions/version.php:197
-#, fuzzy
msgid "Author(s)"
-msgstr "Ðвтор"
+msgstr "Ðвтор(и)"
#: classes/File.php:144
#, php-format
@@ -4450,7 +4442,7 @@ msgstr "Проблем при запиÑване на бележката."
msgid "DB error inserting reply: %s"
msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -5418,11 +5410,9 @@ msgstr ""
"Може да Ñмените адреÑа и наÑтройките за уведомÑване по е-поща на %8$s\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid "Bio: %s"
-msgstr ""
-"БиографиÑ: %s\n"
-"\n"
+msgstr "БиографиÑ: %s"
#: lib/mail.php:286
#, php-format
@@ -6039,47 +6029,47 @@ msgstr "Съобщение"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "преди нÑколко Ñекунди"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "преди около минута"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "преди около %d минути"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "преди около чаÑ"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "преди около %d чаÑа"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "преди около ден"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "преди около %d дни"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "преди около меÑец"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "преди около %d меÑеца"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "преди около година"
diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po
index bc6154421..d0b228c08 100644
--- a/locale/ca/LC_MESSAGES/statusnet.po
+++ b/locale/ca/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Catalan
#
+# Author@translatewiki.net: Aleator
# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Toniher
# --
@@ -9,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:45+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:20+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
@@ -195,7 +196,7 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "No s'ha trobat el mètode API!"
@@ -833,7 +834,7 @@ msgstr "No bloquis l'usuari"
msgid "Yes"
msgstr "Sí"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquejar aquest usuari"
@@ -1613,7 +1614,7 @@ msgstr "Un usuari t'ha bloquejat."
msgid "User is not a member of group."
msgstr "L'usuari no és membre del grup."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Bloca l'usuari del grup"
@@ -1714,19 +1715,19 @@ msgstr "La llista dels usuaris d'aquest grup."
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Bloca"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Fes l'usuari un administrador del grup"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Fes-lo administrador"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Fes l'usuari administrador"
@@ -2131,21 +2132,21 @@ msgstr ""
"tens un nom d'usuari? [Crea](%%action.register%%) un nou compte o prova "
"[OpenID] (%%action.openidlogin%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Només un administrador poc fer a un altre usuari administrador."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s ja és un administrador del grup «%s»."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "No s'ha pogut eliminar l'usuari %s del grup %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "No es pot fer %s un administrador del grup %s"
@@ -2349,8 +2350,8 @@ msgstr "tipus de contingut "
msgid "Only "
msgstr "Només "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Format de data no suportat."
@@ -4502,7 +4503,7 @@ msgstr "Problema en guardar l'avís."
msgid "DB error inserting reply: %s"
msgstr "Error de BD en inserir resposta: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -5119,8 +5120,8 @@ msgstr "No sou membre de cap grup."
#: lib/command.php:714
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
-msgstr[0] "No sou un membre del grup."
-msgstr[1] "No sou un membre del grup."
+msgstr[0] "Sou un membre d'aquest grup:"
+msgstr[1] "Sou un membre d'aquests grups:"
#: lib/command.php:728
msgid ""
@@ -6084,47 +6085,47 @@ msgstr "Missatge"
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "fa pocs segons"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "fa un minut"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "fa %d minuts"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "fa una hora"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "fa %d hores"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "fa un dia"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "fa %d dies"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "fa un mes"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "fa %d mesos"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "fa un any"
diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po
index 81ba42d40..a5d6db600 100644
--- a/locale/cs/LC_MESSAGES/statusnet.po
+++ b/locale/cs/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:47+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:23+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"
@@ -196,7 +196,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Potvrzující kód nebyl nalezen"
@@ -834,7 +834,7 @@ msgstr "Žádný takový uživatel."
msgid "Yes"
msgstr "Ano"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Zablokovat tohoto uživatele"
@@ -1619,7 +1619,7 @@ msgstr "Uživatel nemá profil."
msgid "User is not a member of group."
msgstr "Neodeslal jste nám profil"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "Žádný takový uživatel."
@@ -1723,19 +1723,19 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2106,21 +2106,21 @@ msgstr ""
"[Registrovat](%%action.register%%) nový úÄet, nebo vyzkouÅ¡ejte [OpenID](%%"
"action.openidlogin%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Uživatel nemá profil."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Nelze vytvořit OpenID z: %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Uživatel nemá profil."
@@ -2319,8 +2319,8 @@ msgstr "Připojit"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4444,7 +4444,7 @@ msgstr "Problém při ukládání sdělení"
msgid "DB error inserting reply: %s"
msgstr "Chyba v DB při vkládání odpovědi: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -6056,47 +6056,47 @@ msgstr "Zpráva"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "před pár sekundami"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "asi před minutou"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "asi před %d minutami"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "asi před hodinou"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "asi před %d hodinami"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "asi přede dnem"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "před %d dny"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "asi před měsícem"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "asi před %d mesíci"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "asi před rokem"
diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po
index 9827cb8bd..b9e53e254 100644
--- a/locale/de/LC_MESSAGES/statusnet.po
+++ b/locale/de/LC_MESSAGES/statusnet.po
@@ -3,6 +3,7 @@
# Author@translatewiki.net: Bavatar
# Author@translatewiki.net: Lutzgh
# Author@translatewiki.net: March
+# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Pill
# Author@translatewiki.net: Umherirrender
# --
@@ -12,12 +13,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:50+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:26+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
@@ -207,7 +208,7 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-Methode nicht gefunden."
@@ -831,7 +832,7 @@ msgstr "Diesen Benutzer freigeben"
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Diesen Benutzer blockieren"
@@ -1606,7 +1607,7 @@ msgstr "Dieser Nutzer ist bereits von der Gruppe gesperrt"
msgid "User is not a member of group."
msgstr "Nutzer ist kein Mitglied dieser Gruppe."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Benutzerzugang zu der Gruppe blockieren"
@@ -1705,19 +1706,19 @@ msgstr "Liste der Benutzer in dieser Gruppe."
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blockieren"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Benutzer zu einem Admin dieser Gruppe ernennen"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Zum Admin ernennen"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Diesen Benutzer zu einem Admin ernennen"
@@ -2127,21 +2128,21 @@ msgstr ""
"Melde dich mit Nutzernamen und Passwort an. Du hast noch keinen Nutzernamen? "
"[Registriere](%%action.register%%) ein neues Konto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Nur Administratoren können andere Nutzer zu Administratoren ernennen."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s ist bereits ein Administrator der Gruppe „%s“."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Konnte %s nicht zum Administrator der Gruppe %s machen"
@@ -2346,8 +2347,8 @@ msgstr "Content-Typ "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Kein unterstütztes Datenformat."
@@ -2360,7 +2361,6 @@ msgid "Notice Search"
msgstr "Nachrichtensuche"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Andere Einstellungen"
@@ -2393,9 +2393,8 @@ msgid "URL shortening service is too long (max 50 chars)."
msgstr "URL-Auto-Kürzungs-Dienst ist zu lang (max. 50 Zeichen)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
-msgstr "Keine Gruppe angegeben"
+msgstr "Keine Benutzer ID angegeben"
#: actions/otp.php:83
#, fuzzy
@@ -2418,9 +2417,9 @@ msgid "Login token expired."
msgstr "An Seite anmelden"
#: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
msgid "Outbox for %1$s - page %2$d"
-msgstr "Postausgang von %s"
+msgstr "Postausgang für %1$s - Seite %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2531,9 +2530,8 @@ msgid "Site"
msgstr "Seite"
#: actions/pathsadminpanel.php:238
-#, fuzzy
msgid "Server"
-msgstr "Wiederherstellung"
+msgstr "Server"
#: actions/pathsadminpanel.php:238
msgid "Site's server hostname."
@@ -2616,9 +2614,8 @@ msgid "SSL"
msgstr "SSL"
#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
-#, fuzzy
msgid "Never"
-msgstr "Wiederherstellung"
+msgstr "Nie"
#: actions/pathsadminpanel.php:324
msgid "Sometimes"
@@ -2637,7 +2634,6 @@ msgid "When to use SSL"
msgstr "Wann soll SSL verwendet werden"
#: actions/pathsadminpanel.php:335
-#, fuzzy
msgid "SSL server"
msgstr "SSL-Server"
@@ -2962,7 +2958,7 @@ msgstr ""
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
-msgstr ""
+msgstr "Spitzname oder e-mail Adresse"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
@@ -3226,20 +3222,16 @@ msgid "Couldn’t get a request token."
msgstr "Konnte keinen Anfrage-Token bekommen."
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Nur der Benutzer selbst kann seinen Posteingang lesen."
+msgstr "Nur angemeldete Nutzer können Nachrichten wiederholen."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "Kein Profil angegeben."
+msgstr "Keine Nachricht angegeen."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr ""
-"Du kannst dich nicht registrieren, wenn du die Lizenz nicht akzeptierst."
+msgstr "Du kannst deine eigene Nachricht nicht wiederholen."
#: actions/repeat.php:90
#, fuzzy
@@ -3263,9 +3255,9 @@ msgid "Replies to %s"
msgstr "Antworten an %s"
#: actions/replies.php:127
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s, page %2$d"
-msgstr "Antworten an %1$s auf %2$s!"
+msgstr "Antworten an %1$s, Seite %2$d"
#: actions/replies.php:144
#, php-format
@@ -3314,9 +3306,8 @@ msgid "Replies to %1$s on %2$s!"
msgstr "Antworten an %1$s auf %2$s!"
#: actions/rsd.php:146 actions/version.php:157
-#, fuzzy
msgid "StatusNet"
-msgstr "Status gelöscht."
+msgstr "StatusNet"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
@@ -4520,7 +4511,7 @@ msgstr "Problem bei Speichern der Nachricht."
msgid "DB error inserting reply: %s"
msgstr "Datenbankfehler beim Einfügen der Antwort: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -5137,8 +5128,8 @@ msgstr "Du bist in keiner Gruppe Mitglied."
#: lib/command.php:714
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
-msgstr[0] "Du bist kein Mitglied dieser Gruppe."
-msgstr[1] "Du bist kein Mitglied dieser Gruppe."
+msgstr[0] "Du bist Mitglied dieser Gruppe:"
+msgstr[1] "Du bist Mitglied dieser Gruppen:"
#: lib/command.php:728
msgid ""
@@ -6170,47 +6161,47 @@ msgstr "Nachricht"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "vor wenigen Sekunden"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "vor einer Minute"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "vor %d Minuten"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "vor einer Stunde"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "vor %d Stunden"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "vor einem Tag"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "vor %d Tagen"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "vor einem Monat"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "vor %d Monaten"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "vor einem Jahr"
diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po
index 4bc58dd6c..20365e04a 100644
--- a/locale/el/LC_MESSAGES/statusnet.po
+++ b/locale/el/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:53+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:30+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"
@@ -191,7 +191,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Η μέθοδος του ΑΡΙ δε βÏέθηκε!"
@@ -817,7 +817,7 @@ msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος
msgid "Yes"
msgstr "Îαι"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr ""
@@ -1594,7 +1594,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr ""
@@ -1692,20 +1692,20 @@ msgstr ""
msgid "Admin"
msgstr "ΔιαχειÏιστής"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
#, fuzzy
msgid "Make Admin"
msgstr "ΔιαχειÏιστής"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2067,21 +2067,21 @@ msgstr ""
"ακόμα; Κάντε [εγγÏαφή](%%action.register%%) για ένα νέο λογαÏιασμό ή "
"δοκιμάστε το [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -2277,8 +2277,8 @@ msgstr "ΣÏνδεση"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4372,7 +4372,7 @@ msgstr ""
msgid "DB error inserting reply: %s"
msgstr "Σφάλμα βάσης δεδομένων κατά την εισαγωγή απάντησης: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -5933,47 +5933,47 @@ msgstr "Μήνυμα"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr ""
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr ""
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr ""
diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po
index f896d4e29..0e7acedc0 100644
--- a/locale/en_GB/LC_MESSAGES/statusnet.po
+++ b/locale/en_GB/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:56+0000\n"
+"POT-Creation-Date: 2010-02-14 20:05+0000\n"
+"PO-Revision-Date: 2010-02-14 20:06:20+0000\n"
"Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"
@@ -169,8 +169,8 @@ msgstr ""
msgid "You and friends"
msgstr "You and friends"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Updates from %1$s and friends on %2$s!"
@@ -191,12 +191,12 @@ msgstr "Updates from %1$s and friends on %2$s!"
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API method not found."
@@ -640,7 +640,7 @@ msgstr "Unsupported format."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favourites from %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s updates favourited by %2$s / %2$s."
@@ -651,7 +651,7 @@ msgstr "%1$s updates favourited by %2$s / %2$s."
msgid "%s timeline"
msgstr "%s timeline"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
#: actions/userrss.php:92
#, php-format
msgid "Updates from %1$s on %2$s!"
@@ -667,12 +667,12 @@ msgstr "%1$s / Updates mentioning %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s updates that reply to updates from %2$s / %3$s."
-#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s public timeline"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s updates from everyone!"
@@ -682,7 +682,7 @@ msgstr "%s updates from everyone!"
msgid "Repeated to %s"
msgstr "Repeated to %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Repeats of %s"
@@ -692,7 +692,7 @@ msgstr "Repeats of %s"
msgid "Notices tagged with %s"
msgstr "Notices tagged with %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Updates tagged with %1$s on %2$s!"
@@ -819,7 +819,7 @@ msgstr "Do not block this user"
msgid "Yes"
msgstr "Yes"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Block this user"
@@ -1235,7 +1235,7 @@ msgstr "description is too long (max %d chars)."
msgid "Could not update group."
msgstr "Could not update group."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:259 classes/User_group.php:423
msgid "Could not create aliases."
msgstr "Could not create aliases"
@@ -1581,7 +1581,7 @@ msgstr "User is already blocked from group."
msgid "User is not a member of group."
msgstr "User is not a member of group."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "Block user"
@@ -1689,21 +1689,21 @@ msgstr "A list of the users in this group."
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Block"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
#, fuzzy
msgid "Make user an admin of the group"
msgstr "You must be an admin to edit the group"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
#, fuzzy
msgid "Make Admin"
msgstr "Admin"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2103,21 +2103,21 @@ msgstr ""
"Login with your username and password. Don't have a username yet? [Register]"
"(%%action.register%%) a new account."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "User is already blocked from group."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Could not remove user %s to group %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "You must be an admin to edit the group"
@@ -2323,8 +2323,8 @@ msgstr "Connect"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Not a supported data format."
@@ -4501,7 +4501,7 @@ msgstr "Problem saving notice."
msgid "DB error inserting reply: %s"
msgstr "DB error inserting reply: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1271
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4511,11 +4511,11 @@ msgstr "%1$s (%2$s)"
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welcome to %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:413
msgid "Could not create group."
msgstr "Could not create group."
-#: classes/User_group.php:409
+#: classes/User_group.php:442
msgid "Could not set group membership."
msgstr "Could not set group membership."
@@ -6091,47 +6091,47 @@ msgstr "Message"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:871
msgid "a few seconds ago"
msgstr "a few seconds ago"
-#: lib/util.php:869
+#: lib/util.php:873
msgid "about a minute ago"
msgstr "about a minute ago"
-#: lib/util.php:871
+#: lib/util.php:875
#, php-format
msgid "about %d minutes ago"
msgstr "about %d minutes ago"
-#: lib/util.php:873
+#: lib/util.php:877
msgid "about an hour ago"
msgstr "about an hour ago"
-#: lib/util.php:875
+#: lib/util.php:879
#, php-format
msgid "about %d hours ago"
msgstr "about %d hours ago"
-#: lib/util.php:877
+#: lib/util.php:881
msgid "about a day ago"
msgstr "about a day ago"
-#: lib/util.php:879
+#: lib/util.php:883
#, php-format
msgid "about %d days ago"
msgstr "about %d days ago"
-#: lib/util.php:881
+#: lib/util.php:885
msgid "about a month ago"
msgstr "about a month ago"
-#: lib/util.php:883
+#: lib/util.php:887
#, php-format
msgid "about %d months ago"
msgstr "about %d months ago"
-#: lib/util.php:885
+#: lib/util.php:889
msgid "about a year ago"
msgstr "about a year ago"
diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po
index f49587641..0d7c9384a 100644
--- a/locale/es/LC_MESSAGES/statusnet.po
+++ b/locale/es/LC_MESSAGES/statusnet.po
@@ -12,12 +12,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:53:59+0000\n"
+"POT-Creation-Date: 2010-02-14 20:05+0000\n"
+"PO-Revision-Date: 2010-02-14 20:06:23+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
@@ -41,7 +41,7 @@ msgstr "Privado"
#: actions/accessadminpanel.php:163
msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "¿Prohibir a los usuarios anónimos (no conectados) ver el sitio ?"
+msgstr "¿Prohibir a los usuarios anónimos (no conectados) ver el sitio?"
#: actions/accessadminpanel.php:167
msgid "Invite only"
@@ -138,6 +138,8 @@ msgstr "Feed de los amigos de %s (Atom)"
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
+"Esta es la línea temporal de %s y amistades, pero nadie ha publicado nada "
+"todavía."
#: actions/all.php:132
#, php-format
@@ -145,6 +147,8 @@ msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
+"Esta es la línea temporal de %s y amistades, pero nadie ha publicado nada "
+"todavía."
#: actions/all.php:134
#, php-format
@@ -152,6 +156,8 @@ msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
+"Trata de suscribirte a más personas, [unirte a un grupo] (%%action.groups%%) "
+"o publicar algo."
#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
#, php-format
@@ -159,13 +165,15 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
+"Puede intentar [guiñar a %1$s](../%2$s) desde su perfil o [publicar algo a "
+"su atención ](%%%%action.newnotice%%%%?status_textarea=%3$s)."
#: actions/all.php:165
msgid "You and friends"
msgstr "Tú y amigos"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
@@ -186,15 +194,14 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
-#, fuzzy
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
msgid "API method not found."
-msgstr "¡No se encontró el método de la API!"
+msgstr "Método de API no encontrado."
#: actions/apiaccountupdatedeliverydevice.php:85
#: actions/apiaccountupdateprofile.php:89
@@ -215,9 +222,10 @@ msgid ""
"You must specify a parameter named 'device' with a value of one of: sms, im, "
"none"
msgstr ""
+"Tienes que especificar un parámetro llamdao 'dispositivo' con un valor a "
+"elegir entre: sms, im, ninguno"
#: actions/apiaccountupdatedeliverydevice.php:132
-#, fuzzy
msgid "Could not update user."
msgstr "No se pudo actualizar el usuario."
@@ -231,7 +239,6 @@ msgid "User has no profile."
msgstr "El usuario no tiene un perfil."
#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
msgid "Could not save profile."
msgstr "No se pudo guardar el perfil."
@@ -256,15 +263,13 @@ msgstr ""
#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
msgid "Unable to save your design settings."
-msgstr "¡No se pudo guardar tu configuración de Twitter!"
+msgstr "No se pudo grabar tu configuración de diseño."
#: actions/apiaccountupdateprofilebackgroundimage.php:187
#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
msgid "Could not update your design."
-msgstr "No se pudo actualizar el usuario."
+msgstr "No se pudo actualizar tu diseño."
#: actions/apiblockcreate.php:105
msgid "You cannot block yourself!"
@@ -370,20 +375,20 @@ msgstr "No se pudo encontrar ningún usuario de destino."
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
-"El apodo debe tener solamente letras minúsculas y números y no puede tener "
+"El usuario debe tener solamente letras minúsculas y números y no puede tener "
"espacios."
#: actions/apigroupcreate.php:173 actions/editgroup.php:186
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
-msgstr "El apodo ya existe. Prueba otro."
+msgstr "El usuario ya existe. Prueba con otro."
#: actions/apigroupcreate.php:180 actions/editgroup.php:189
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
-msgstr "Apodo no válido"
+msgstr "Usuario inválido"
#: actions/apigroupcreate.php:196 actions/editapplication.php:215
#: actions/editgroup.php:195 actions/newapplication.php:203
@@ -418,20 +423,20 @@ msgstr "¡Muchos seudónimos! El máximo es %d."
#: actions/apigroupcreate.php:264 actions/editgroup.php:224
#: actions/newgroup.php:168
-#, fuzzy, php-format
+#, php-format
msgid "Invalid alias: \"%s\""
-msgstr "Tag no válido: '%s' "
+msgstr "Alias inválido: \"%s\""
#: actions/apigroupcreate.php:273 actions/editgroup.php:228
#: actions/newgroup.php:172
-#, fuzzy, php-format
+#, php-format
msgid "Alias \"%s\" already in use. Try another one."
-msgstr "El apodo ya existe. Prueba otro."
+msgstr "El alias \"%s\" ya está en uso. Intenta usar otro."
#: actions/apigroupcreate.php:286 actions/editgroup.php:234
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
-msgstr ""
+msgstr "El alias no puede ser el mismo que el usuario."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
@@ -448,18 +453,18 @@ msgid "You have been blocked from that group by the admin."
msgstr "Has sido bloqueado de ese grupo por el administrador."
#: actions/apigroupjoin.php:138 actions/joingroup.php:124
-#, fuzzy, php-format
+#, php-format
msgid "Could not join user %1$s to group %2$s."
-msgstr "No se puede unir usuario %s a grupo %s"
+msgstr "No se pudo unir el usuario %s al grupo %s"
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
msgstr "No eres miembro de este grupo."
#: actions/apigroupleave.php:124 actions/leavegroup.php:119
-#, fuzzy, php-format
+#, php-format
msgid "Could not remove user %1$s from group %2$s."
-msgstr "No se pudo eliminar a usuario %s de grupo %s"
+msgstr "No se pudo eliminar al usuario %1$s del grupo %2$s."
#: actions/apigrouplist.php:95
#, php-format
@@ -478,12 +483,11 @@ msgstr "Grupos en %s"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "No se ha provisto de un parámetro oauth_token."
#: actions/apioauthauthorize.php:106
-#, fuzzy
msgid "Invalid token."
-msgstr "Tamaño inválido."
+msgstr "Token inválido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -505,19 +509,18 @@ msgstr ""
"Hubo un problema con tu clave de sesión. Por favor, intenta nuevamente."
#: actions/apioauthauthorize.php:135
-#, fuzzy
msgid "Invalid nickname / password!"
-msgstr "Usuario o contraseña inválidos."
+msgstr "¡Apodo o contraseña inválidos!"
#: actions/apioauthauthorize.php:159
-#, fuzzy
msgid "Database error deleting OAuth application user."
-msgstr "Error al configurar el usuario."
+msgstr ""
+"Error de la base de datos durante la eliminación del usuario de la "
+"aplicación OAuth."
#: actions/apioauthauthorize.php:185
-#, fuzzy
msgid "Database error inserting OAuth application user."
-msgstr "Error de la BD al insertar la etiqueta clave: %s"
+msgstr "Error de base de datos al insertar usuario de la aplicación OAuth."
#: actions/apioauthauthorize.php:214
#, php-format
@@ -525,11 +528,13 @@ msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"El token de solicitud %s ha sido autorizado. Por favor, cámbialo por un "
+"token de acceso."
#: actions/apioauthauthorize.php:227
#, php-format
msgid "The request token %s has been denied and revoked."
-msgstr ""
+msgstr "El token de solicitud %2 ha sido denegado y revocado."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -542,7 +547,7 @@ msgstr "Envío de formulario inesperado."
#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Una aplicación quisiera conectarse a tu cuenta"
#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
@@ -555,6 +560,9 @@ msgid ""
"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
"give access to your %4$s account to third parties you trust."
msgstr ""
+"La aplicación <strong>%1$s</strong> por <strong>%2$s</strong> solicita "
+"permiso para <strong>%3$s</strong> la información de tu cuenta %4$s. Sólo "
+"debes dar acceso a tu cuenta %4$s a terceras partes en las que confíes."
#: actions/apioauthauthorize.php:310 lib/action.php:441
msgid "Account"
@@ -616,9 +624,9 @@ msgstr "No hay estado para ese ID"
#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
-#, fuzzy, php-format
+#, php-format
msgid "That's too long. Max notice size is %d chars."
-msgstr "Demasiado largo. La longitud máxima es de 140 caracteres. "
+msgstr "La entrada es muy larga. El tamaño máximo es de %d caracteres."
#: actions/apistatusesupdate.php:202
msgid "Not found"
@@ -628,20 +636,22 @@ msgstr "No encontrado"
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
+"El tamaño máximo de la notificación es %d caracteres, incluyendo el URL "
+"adjunto."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
msgid "Unsupported format."
msgstr "Formato no soportado."
#: actions/apitimelinefavorites.php:108
-#, fuzzy, php-format
+#, php-format
msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favoritos desde %s"
+msgstr "%1$s / Favoritos de %2$s"
-#: actions/apitimelinefavorites.php:120
-#, fuzzy, php-format
+#: actions/apitimelinefavorites.php:117
+#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s actualizaciones favoritas por %s / %s."
+msgstr "%1$s actualizaciones favoritas de %2$s / %2$s."
#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
#: actions/grouprss.php:131 actions/userrss.php:90
@@ -649,61 +659,59 @@ msgstr "%s actualizaciones favoritas por %s / %s."
msgid "%s timeline"
msgstr "línea temporal de %s"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
#: actions/userrss.php:92
#, php-format
msgid "Updates from %1$s on %2$s!"
msgstr "¡Actualizaciones de %1$s en %2$s!"
#: actions/apitimelinementions.php:117
-#, fuzzy, php-format
+#, php-format
msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Actualizaciones en respuesta a %2$s"
+msgstr "%1$s / Actualizaciones que mencionan %2$s"
#: actions/apitimelinementions.php:127
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "actualizaciones de %1$s en respuesta a las de %2$s / %3$s"
-#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "línea temporal pública de %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "¡Actualizaciones de todos en %s!"
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Respuestas a %s"
+msgstr "Repetido a %s"
-#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#: actions/apitimelineretweetsofme.php:114
+#, php-format
msgid "Repeats of %s"
-msgstr "Respuestas a %s"
+msgstr "Repeticiones de %s"
#: actions/apitimelinetag.php:102 actions/tag.php:66
#, php-format
msgid "Notices tagged with %s"
msgstr "Avisos marcados con %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
-#, fuzzy, php-format
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#, php-format
msgid "Updates tagged with %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "Actualizaciones etiquetadas con %1$s en %2$s!"
#: actions/apiusershow.php:96
-#, fuzzy
msgid "Not found."
-msgstr "No se encontró."
+msgstr "No encontrado."
#: actions/attachment.php:73
-#, fuzzy
msgid "No such attachment."
-msgstr "No existe ese documento."
+msgstr "No existe tal archivo adjunto."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -727,9 +735,9 @@ msgid "Avatar"
msgstr "Avatar"
#: actions/avatarsettings.php:78
-#, fuzzy, php-format
+#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Puedes cargar tu avatar personal."
+msgstr "Puedes subir tu imagen personal. El tamaño máximo de archivo es %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
@@ -782,14 +790,12 @@ msgid "Failed updating avatar."
msgstr "Error al actualizar avatar."
#: actions/avatarsettings.php:393
-#, fuzzy
msgid "Avatar deleted."
-msgstr "Avatar actualizado"
+msgstr "Avatar borrado."
#: actions/block.php:69
-#, fuzzy
msgid "You already blocked that user."
-msgstr "Ya has bloqueado este usuario."
+msgstr "Ya has bloqueado a este usuario."
#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
msgid "Block user"
@@ -801,6 +807,9 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"¿Realmente deseas bloquear a este usuario? Una vez que lo hagas, se "
+"desuscribirá de tu cuenta, no podrá suscribirse a ella en el futuro y no se "
+"te notificará de ninguna de sus respuestas @."
#: actions/block.php:143 actions/deleteapplication.php:153
#: actions/deletenotice.php:145 actions/deleteuser.php:147
@@ -809,9 +818,8 @@ msgid "No"
msgstr "No"
#: actions/block.php:143 actions/deleteuser.php:147
-#, fuzzy
msgid "Do not block this user"
-msgstr "Desbloquear este usuario"
+msgstr "No bloquear a este usuario"
#: actions/block.php:144 actions/deleteapplication.php:158
#: actions/deletenotice.php:146 actions/deleteuser.php:148
@@ -819,7 +827,7 @@ msgstr "Desbloquear este usuario"
msgid "Yes"
msgstr "Sí"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este usuario."
@@ -838,19 +846,19 @@ msgid "No such group."
msgstr "No existe ese grupo."
#: actions/blockedfromgroup.php:90
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked profiles"
-msgstr "Perfil de usuario"
+msgstr "%s perfiles bloqueados"
#: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#, php-format
msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s y amigos, página %d"
+msgstr "%1$s perfiles bloqueados, página %2$d"
#: actions/blockedfromgroup.php:108
-#, fuzzy
msgid "A list of the users blocked from joining this group."
-msgstr "Lista de los usuarios en este grupo."
+msgstr ""
+"Una lista de los usuarios que han sido bloqueados para unirse a este grupo."
#: actions/blockedfromgroup.php:281
msgid "Unblock user from group"
@@ -903,7 +911,6 @@ msgid "Couldn't delete email confirmation."
msgstr "No se pudo eliminar la confirmación de correo electrónico."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
msgstr "Confirmar la dirección"
@@ -922,20 +929,17 @@ msgid "Notices"
msgstr "Avisos"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "Debes estar conectado para editar un grupo."
+msgstr "Debes estar registrado para borrar una aplicación."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "Aviso sin perfil"
+msgstr "Aplicación no encontrada."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
-#, fuzzy
msgid "You are not the owner of this application."
-msgstr "No eres miembro de este grupo."
+msgstr "No eres el propietario de esta aplicación."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
@@ -944,9 +948,8 @@ msgid "There was a problem with your session token."
msgstr "Hubo problemas con tu clave de sesión."
#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
msgid "Delete application"
-msgstr "No existe ese aviso."
+msgstr "Eliminar la aplicación"
#: actions/deleteapplication.php:149
msgid ""
@@ -954,16 +957,17 @@ msgid ""
"about the application from the database, including all existing user "
"connections."
msgstr ""
+"¿Estás seguro de que quieres eliminar esta aplicación? Esto borrará todos "
+"los datos acerca de la aplicación de la base de datos, incluyendo todas las "
+"conexiones de usuario existente."
#: actions/deleteapplication.php:156
-#, fuzzy
msgid "Do not delete this application"
-msgstr "No se puede eliminar este aviso."
+msgstr "No eliminar esta aplicación"
#: actions/deleteapplication.php:160
-#, fuzzy
msgid "Delete this application"
-msgstr "Borrar este aviso"
+msgstr "Borrar esta aplicación"
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -980,13 +984,12 @@ msgid "Can't delete this notice."
msgstr "No se puede eliminar este aviso."
#: actions/deletenotice.php:103
-#, fuzzy
msgid ""
"You are about to permanently delete a notice. Once this is done, it cannot "
"be undone."
msgstr ""
-"Estás a punto de eliminar permanentemente un aviso. Si lo hace, no se podrá "
-"deshacer"
+"Estás a punto de eliminar un mensaje permanentemente. Una vez hecho esto, no "
+"lo puedes deshacer."
#: actions/deletenotice.php:109 actions/deletenotice.php:141
msgid "Delete notice"
@@ -997,9 +1000,8 @@ msgid "Are you sure you want to delete this notice?"
msgstr "¿Estás seguro de que quieres eliminar este aviso?"
#: actions/deletenotice.php:145
-#, fuzzy
msgid "Do not delete this notice"
-msgstr "No se puede eliminar este aviso."
+msgstr "No eliminar este mensaje"
#: actions/deletenotice.php:146 lib/noticelist.php:624
msgid "Delete this notice"
@@ -1010,9 +1012,8 @@ msgid "You cannot delete users."
msgstr "No puedes borrar usuarios."
#: actions/deleteuser.php:74
-#, fuzzy
msgid "You can only delete local users."
-msgstr "No puedes borrar el estado de otro usuario."
+msgstr "Sólo puedes eliminar usuarios locales."
#: actions/deleteuser.php:110 actions/deleteuser.php:133
msgid "Delete user"
@@ -1023,6 +1024,8 @@ msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
+"¿Realmente deseas eliminar este usuario? Esto borrará de la base de datos "
+"todos los datos sobre el usuario, sin dejar una copia de seguridad."
#: actions/deleteuser.php:148 lib/deleteuserform.php:77
msgid "Delete this user"
@@ -1031,16 +1034,15 @@ msgstr "Borrar este usuario"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
#: lib/adminpanelaction.php:316 lib/groupnav.php:119
msgid "Design"
-msgstr ""
+msgstr "Diseño"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
-msgstr ""
+msgstr "Configuración de diseño de este sitio StatusNet."
#: actions/designadminpanel.php:275
-#, fuzzy
msgid "Invalid logo URL."
-msgstr "Tamaño inválido."
+msgstr "URL de logotipo inválido."
#: actions/designadminpanel.php:279
#, php-format
@@ -1052,56 +1054,54 @@ msgid "Change logo"
msgstr "Cambiar logo"
#: actions/designadminpanel.php:380
-#, fuzzy
msgid "Site logo"
-msgstr "Invitar"
+msgstr "Logo del sitio"
#: actions/designadminpanel.php:387
-#, fuzzy
msgid "Change theme"
-msgstr "Cambiar"
+msgstr "Cambiar el tema"
#: actions/designadminpanel.php:404
-#, fuzzy
msgid "Site theme"
-msgstr "Aviso de sitio"
+msgstr "Tema del sitio"
#: actions/designadminpanel.php:405
-#, fuzzy
msgid "Theme for the site."
-msgstr "Salir de sitio"
+msgstr "Tema para el sitio."
#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
-msgstr ""
+msgstr "Cambiar la imagen de fondo"
#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
-msgstr ""
+msgstr "Fondo"
#: actions/designadminpanel.php:427
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
-msgstr "Puedes cargar una imagen de logo para tu grupo."
+msgstr ""
+"Puedes subir una imagen de fondo para el sitio. El tamaño máximo de archivo "
+"es %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
-msgstr ""
+msgstr "Activado"
#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
-msgstr ""
+msgstr "Desactivado"
#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Activar o desactivar la imagen de fondo."
#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Imagen de fondo en mosaico"
#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
@@ -1112,9 +1112,8 @@ msgid "Content"
msgstr "Contenido"
#: actions/designadminpanel.php:523 lib/designsettings.php:204
-#, fuzzy
msgid "Sidebar"
-msgstr "Buscar"
+msgstr "Barra lateral"
#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
@@ -1126,19 +1125,19 @@ msgstr "Vínculos"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "Utilizar los valores predeterminados"
#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
-msgstr ""
+msgstr "Restaurar los diseños predeterminados"
#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
-msgstr ""
+msgstr "Volver a los valores predeterminados"
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
-msgstr ""
+msgstr "Guardar el diseño"
#: actions/disfavor.php:81
msgid "This notice is not a favorite!"
@@ -1149,85 +1148,74 @@ msgid "Add to favorites"
msgstr "Agregar a favoritos"
#: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
msgid "No such document \"%s\""
-msgstr "No existe ese documento."
+msgstr "No existe tal documento \"%s\""
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
-msgstr "Otras opciones"
+msgstr "Editar aplicación"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Debes estar conectado para editar un grupo."
+msgstr "Debes haber iniciado sesión para editar una aplicación."
#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "No existe ese aviso."
+msgstr "No existe tal aplicación."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Usa este formulario para editar el grupo."
+msgstr "Utiliza este formulario para editar tu aplicación."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Igual a la contraseña de arriba. Requerida"
+msgstr "Se requiere un nombre"
#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
msgid "Name is too long (max 255 chars)."
-msgstr "Tu nombre es demasiado largo (max. 255 carac.)"
+msgstr "El nombre es muy largo (máx. 255 carac.)"
#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
msgid "Name already in use. Try another one."
-msgstr "El apodo ya existe. Prueba otro."
+msgstr "Ese nombre ya está en uso. Prueba con otro."
#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
msgid "Description is required."
-msgstr "Descripción"
+msgstr "Se requiere una descripción"
#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "El URL fuente es muy largo."
#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
msgid "Source URL is not valid."
-msgstr "La página de inicio no es un URL válido."
+msgstr "La URL fuente es inválida."
#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "Se requiere una organización."
#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
msgid "Organization is too long (max 255 chars)."
-msgstr "La ubicación es demasiado larga (máx. 255 caracteres)."
+msgstr "El texto de organización es muy largo (máx. 255 caracteres)."
#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Se requiere una página principal de organización"
#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "La devolución de llamada es muy larga."
#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr ""
+msgstr "El URL de devolución de llamada es inválido."
#: actions/editapplication.php:258
-#, fuzzy
msgid "Could not update application."
-msgstr "No se pudo actualizar el grupo."
+msgstr "No fue posible actualizar la aplicación."
#: actions/editgroup.php:56
#, php-format
@@ -1240,36 +1228,33 @@ msgstr "Debes estar conectado para crear un grupo"
#: actions/editgroup.php:103 actions/editgroup.php:168
#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
-#, fuzzy
msgid "You must be an admin to edit the group."
-msgstr "Debes ser un admin para editar el grupo"
+msgstr "Para editar el grupo debes ser administrador."
#: actions/editgroup.php:154
msgid "Use this form to edit the group."
msgstr "Usa este formulario para editar el grupo."
#: actions/editgroup.php:201 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
msgid "description is too long (max %d chars)."
-msgstr "Descripción es demasiado larga (máx. 140 caracteres)."
+msgstr "La descripción es muy larga (máx. %d caracteres)."
#: actions/editgroup.php:253
msgid "Could not update group."
msgstr "No se pudo actualizar el grupo."
-#: actions/editgroup.php:259 classes/User_group.php:390
-#, fuzzy
+#: actions/editgroup.php:259 classes/User_group.php:423
msgid "Could not create aliases."
-msgstr "No se pudo crear favorito."
+msgstr "No fue posible crear alias."
#: actions/editgroup.php:269
msgid "Options saved."
msgstr "Se guardó Opciones."
#: actions/emailsettings.php:60
-#, fuzzy
msgid "Email settings"
-msgstr "Opciones de Email"
+msgstr "Configuración del correo electrónico"
#: actions/emailsettings.php:71
#, php-format
@@ -1306,9 +1291,8 @@ msgid "Cancel"
msgstr "Cancelar"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
-msgstr "Direcciones de correo electrónico"
+msgstr "Dirección de correo electrónico"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1355,10 +1339,9 @@ msgstr ""
"Enviarme un correo electrónico cuando alguien me envía un mensaje privado."
#: actions/emailsettings.php:174
-#, fuzzy
msgid "Send me email when someone sends me an \"@-reply\"."
msgstr ""
-"Enviarme un correo electrónico cuando alguien me envía un mensaje privado."
+"Enviarme un correo electrónico cuando alguien me envíe una \"@-respuesta\"."
#: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email."
@@ -1462,29 +1445,31 @@ msgstr "Sacar favorito"
#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
-#, fuzzy
msgid "Popular notices"
-msgstr "Avisos populares"
+msgstr "Mensajes populares"
#: actions/favorited.php:67
-#, fuzzy, php-format
+#, php-format
msgid "Popular notices, page %d"
-msgstr "Avisos populares, página %d"
+msgstr "Mensajes populares, página %d"
#: actions/favorited.php:79
-#, fuzzy
msgid "The most popular notices on the site right now."
-msgstr "Ahora se muestran los avisos más populares en el sitio."
+msgstr "Los mensajes más populares del sitio en este momento."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
msgstr ""
+"Los mensajes favoritos aparecen en esta página, pero todavía nadie ha "
+"marcado algún mensaje como favorito."
#: actions/favorited.php:153
msgid ""
"Be the first to add a notice to your favorites by clicking the fave button "
"next to any notice you like."
msgstr ""
+"Se la primera persona en añadir un mensaje a tus favoritos con el botón de "
+"favoritos que se encuentra al lado de cualquier mensaje que te guste."
#: actions/favorited.php:156
#, php-format
@@ -1492,6 +1477,8 @@ msgid ""
"Why not [register an account](%%action.register%%) and be the first to add a "
"notice to your favorites!"
msgstr ""
+"¿Por qué no [registrar una cuenta](%%action.register%%) y ser la primera "
+"persona en añadir un mensaje a tus favoritos?"
#: actions/favoritesrss.php:111 actions/showfavorites.php:77
#: lib/personalgroupnav.php:115
@@ -1500,9 +1487,9 @@ msgid "%s's favorite notices"
msgstr "Avisos favoritos de %s"
#: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
msgid "Updates favored by %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "¡Actualizaciones favorecidas por %1$ s en %2$s!"
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
@@ -1515,14 +1502,13 @@ msgid "Featured users, page %d"
msgstr "Usuarios que figuran, página %d"
#: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
msgid "A selection of some great users on %s"
-msgstr "Una selección de algunos de los grandes usuarios en %s"
+msgstr "Una selección de fantásticos usuarios en %s"
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Nuevo aviso"
+msgstr "No hay ID de mensaje."
#: actions/file.php:38
msgid "No notice."
@@ -1557,14 +1543,12 @@ msgid "You are not authorized."
msgstr "No estás autorizado."
#: actions/finishremotesubscribe.php:113
-#, fuzzy
msgid "Could not convert request token to access token."
-msgstr "No se pudieron convertir las clavesde petición a claves de acceso."
+msgstr "No se pudo convertir el token de solicitud en token de acceso."
#: actions/finishremotesubscribe.php:118
-#, fuzzy
msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Versión desconocida del protocolo OMB."
+msgstr "El servicio remoto utiliza una versión desconocida del protocolo OMB."
#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
msgid "Error updating remote profile"
@@ -1597,7 +1581,7 @@ msgstr "Grupo no especificado."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
-msgstr ""
+msgstr "Sólo un administrador puede bloquear miembros de un grupo."
#: actions/groupblock.php:95
msgid "User is already blocked from group."
@@ -1607,7 +1591,7 @@ msgstr "Usuario ya está bloqueado del grupo."
msgid "User is not a member of group."
msgstr "Usuario no es miembro del grupo"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Bloquear usuario de grupo"
@@ -1618,6 +1602,9 @@ msgid ""
"will be removed from the group, unable to post, and unable to subscribe to "
"the group in the future."
msgstr ""
+"¿Realmente deseas bloquear al usuario \"%1$s\" del grupo \"%2$s\"? Se "
+"eliminará del grupo y no podrá publicar ni suscribirse al grupo en lo "
+"sucesivo."
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
@@ -1630,6 +1617,8 @@ msgstr "Bloquear este usuario de este grupo"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
msgstr ""
+"Se ha producido un error en la base de datos al bloquear el usuario del "
+"grupo."
#: actions/groupbyid.php:74 actions/userbyid.php:70
msgid "No ID."
@@ -1640,56 +1629,53 @@ msgid "You must be logged in to edit a group."
msgstr "Debes estar conectado para editar un grupo."
#: actions/groupdesignsettings.php:141
-#, fuzzy
msgid "Group design"
-msgstr "Grupos"
+msgstr "Diseño de grupo"
#: actions/groupdesignsettings.php:152
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Personaliza el aspecto de tu grupo con una imagen de fondo y la paleta de "
+"colores que prefieras."
#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
msgid "Couldn't update your design."
-msgstr "No se pudo actualizar el usuario."
+msgstr "No fue posible actualizar tu diseño."
#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
-#, fuzzy
msgid "Design preferences saved."
-msgstr "Preferencias de sincronización guardadas."
+msgstr "Preferencias de diseño guardadas."
#: actions/grouplogo.php:139 actions/grouplogo.php:192
msgid "Group logo"
msgstr "Logo de grupo"
#: actions/grouplogo.php:150
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
-msgstr "Puedes cargar una imagen de logo para tu grupo."
+msgstr ""
+"Puedes subir una imagen de logo para tu grupo. El tamaño máximo del archivo "
+"debe ser %s."
#: actions/grouplogo.php:178
-#, fuzzy
msgid "User without matching profile."
-msgstr "Usuario sin perfil equivalente"
+msgstr "Usuario sin perfil coincidente."
#: actions/grouplogo.php:362
-#, fuzzy
msgid "Pick a square area of the image to be the logo."
-msgstr "Elige un área cuadrada de la imagen para que sea tu avatar"
+msgstr "Elige un área cuadrada de la imagen para que sea tu logo."
#: actions/grouplogo.php:396
-#, fuzzy
msgid "Logo updated."
-msgstr "SE actualizó logo."
+msgstr "Logo actualizado."
#: actions/grouplogo.php:398
-#, fuzzy
msgid "Failed updating logo."
-msgstr "Error al actualizar logo."
+msgstr "Error al actualizar el logo."
#: actions/groupmembers.php:93 lib/groupnav.php:92
#, php-format
@@ -1697,9 +1683,9 @@ msgid "%s group members"
msgstr "Miembros del grupo %s"
#: actions/groupmembers.php:96
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group members, page %2$d"
-msgstr "Miembros del grupo %s, página %d"
+msgstr "%1$s miembros de grupo, página %2$d"
#: actions/groupmembers.php:111
msgid "A list of the users in this group."
@@ -1709,28 +1695,26 @@ msgstr "Lista de los usuarios en este grupo."
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
-#, fuzzy
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
-msgstr "Debes ser un admin para editar el grupo"
+msgstr "Convertir al usuario en administrador del grupo"
-#: actions/groupmembers.php:473
-#, fuzzy
+#: actions/groupmembers.php:475
msgid "Make Admin"
-msgstr "Admin"
+msgstr "Convertir en administrador"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
-msgstr ""
+msgstr "Convertir a este usuario en administrador"
#: actions/grouprss.php:133
-#, fuzzy, php-format
+#, php-format
msgid "Updates from members of %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "¡Actualizaciones de miembros de %1$s en %2$s!"
#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
@@ -1751,30 +1735,33 @@ msgid ""
"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
"%%%%)"
msgstr ""
+"Grupos %%%%site.name%%%% te permiten encontrar gente de intereses afines a "
+"los tuyo y hablar con ellos. Después de unirte al grupo, podrás enviarle "
+"mensajes a todos sus miembros mediante la sintaxis \"!groupname\". ¿No "
+"encuentras un grupo que te guste? ¡Intenta [buscar otro](%%%%action."
+"groupsearch%%%%) o [crea tú uno!](%%%%action.newgroup%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
msgstr "Crear un nuevo grupo"
#: actions/groupsearch.php:52
-#, fuzzy, php-format
+#, php-format
msgid ""
"Search for groups on %%site.name%% by their name, location, or description. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Buscar personas en %%site.name%% por nombre, ubicación o intereses. Separa "
-"los términos con espacios; deben tener una longitud mínima de 3 caracteres."
+"Busca grupos en %%site.name%% por su nombre, ubicación o descripción. Separa "
+"los términos con espacios. Los términos tienen que ser de 3 o más caracteres."
#: actions/groupsearch.php:58
-#, fuzzy
msgid "Group search"
-msgstr "Buscador de grupos"
+msgstr "Búsqueda en grupos"
#: actions/groupsearch.php:79 actions/noticesearch.php:117
#: actions/peoplesearch.php:83
-#, fuzzy
msgid "No results."
-msgstr "Ningún resultado"
+msgstr "No se obtuvo resultados."
#: actions/groupsearch.php:82
#, php-format
@@ -1782,6 +1769,8 @@ msgid ""
"If you can't find the group you're looking for, you can [create it](%%action."
"newgroup%%) yourself."
msgstr ""
+"Si no puedes encontrar el grupo que estás buscando, puedes [crearlo] (%%"
+"action.newgroup%%) tú mismo."
#: actions/groupsearch.php:85
#, php-format
@@ -1789,23 +1778,22 @@ msgid ""
"Why not [register an account](%%action.register%%) and [create the group](%%"
"action.newgroup%%) yourself!"
msgstr ""
+"¿Por qué no [registras una cuenta](%%action.register%%) y [creas el grupo](%%"
+"action.newgroup%%) tú mismo?"
#: actions/groupunblock.php:91
msgid "Only an admin can unblock group members."
-msgstr ""
+msgstr "Sólo un administrador puede desbloquear miembros de grupos."
#: actions/groupunblock.php:95
-#, fuzzy
msgid "User is not blocked from group."
-msgstr "El usuario te ha bloqueado."
+msgstr "El usuario no está bloqueado del grupo."
#: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
msgid "Error removing the block."
-msgstr "Error al sacar bloqueo."
+msgstr "Se ha producido un error al eliminar el bloque."
#: actions/imsettings.php:59
-#, fuzzy
msgid "IM settings"
msgstr "Configuración de mensajería instantánea"
@@ -1819,9 +1807,8 @@ msgstr ""
"Jabber/GTalk. Configura tu dirección y opciones abajo."
#: actions/imsettings.php:89
-#, fuzzy
msgid "IM is not available."
-msgstr "Esta página no está disponible en un "
+msgstr "La mensajería instantánea no está disponible."
#: actions/imsettings.php:106
msgid "Current confirmed Jabber/GTalk address."
@@ -1838,7 +1825,6 @@ msgstr ""
"de amigos?)"
#: actions/imsettings.php:124
-#, fuzzy
msgid "IM address"
msgstr "Dirección de mensajería instantánea"
@@ -1904,9 +1890,9 @@ msgid "That is not your Jabber ID."
msgstr "Ese no es tu Jabber ID."
#: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
msgid "Inbox for %1$s - page %2$d"
-msgstr "Bandeja de entrada para %s"
+msgstr "Bandeja de entrada de %1$s - página %2$d"
#: actions/inbox.php:62
#, php-format
@@ -1920,7 +1906,7 @@ msgstr ""
#: actions/invite.php:39
msgid "Invites have been disabled."
-msgstr ""
+msgstr "Se han inhabilitado las invitaciones."
#: actions/invite.php:41
#, php-format
@@ -1999,7 +1985,7 @@ msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s te ha invitado a que te unas con el/ellos en %2$s"
#: actions/invite.php:228
-#, fuzzy, php-format
+#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
"\n"
@@ -2028,55 +2014,54 @@ msgid ""
"\n"
"Sincerely, %2$s\n"
msgstr ""
-"%1$s te ha invitado a unirte a ellos en %2$s (%3$s).\n"
+"%1$s te ha invitado a unirte a %2$s (%3$s).\n"
"\n"
-"%2$s es un servicio de microblogueo que te permite estar al tanto de la "
-"gente que conoces y que te interesa.\n"
+"%2$s es un servicio de microblogueo que te permite mantenerte al corriente "
+"de las personas que sigues y que te interesan.\n"
"\n"
-"Puedes compartir noticias sobre tí mismo, tus pensamientos, o tu vida en "
-"línea con gente que te conoce. También es bueno para conocer gente que "
-"comparta tus intereses.\n"
+"También puedes compartir noticias acerca de tí, tus pensamientos o tu vida "
+"en línea con la gente que sabe de tí. También es una excelente herramienta "
+"para conocer gente nueva que comparta tus intereses.\n"
"\n"
-"%1$s dijo:\n"
+"%1$s ha dicho:\n"
"\n"
"%4$s\n"
"\n"
-"Puedes ver el perfil de %1$s en %2$s aquí:\n"
+"Puedes ver el perfil de %1$s aquí en %2$s:\n"
"\n"
"%5$s\n"
"\n"
-"Si quieres inscribirte y probar el servicio, haz click en enlace debajo para "
+"Si quieres probar el sevicio, haz clic en el vínculo a continuación para "
"aceptar la invitación.\n"
"\n"
"%6$s\n"
"\n"
-"Si no deseas inscribirte puedes ignorar este mensaje. Gracias por tu "
-"paciencia y tiempo.\n"
+"Si por el contrario, no quieres, ignora este mensaje. Muchas gracias por tu "
+"paciencia y por tu tiempo.\n"
"\n"
-"Sinceramente, %2$s\n"
+"Saludos cordiales, %2$s\n"
#: actions/joingroup.php:60
msgid "You must be logged in to join a group."
msgstr "Debes estar conectado para unirte a un grupo."
#: actions/joingroup.php:131
-#, fuzzy, php-format
+#, php-format
msgid "%1$s joined group %2$s"
-msgstr "%s se unió a grupo %s"
+msgstr "%1$s se ha unido al grupo %2$"
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
msgstr "Debes estar conectado para dejar un grupo."
#: actions/leavegroup.php:90 lib/command.php:265
-#, fuzzy
msgid "You are not a member of that group."
-msgstr "No eres miembro de ese grupo"
+msgstr "No eres miembro de este grupo."
#: actions/leavegroup.php:127
-#, fuzzy, php-format
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s dejó grupo %s"
+msgstr "%1$s ha dejado el grupo %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -2087,9 +2072,8 @@ msgid "Incorrect username or password."
msgstr "Nombre de usuario o contraseña incorrectos."
#: actions/login.php:132 actions/otp.php:120
-#, fuzzy
msgid "Error setting user. You are probably not authorized."
-msgstr "No autorizado."
+msgstr "Error al configurar el usuario. Posiblemente no tengas autorización."
#: actions/login.php:188 actions/login.php:241 lib/action.php:466
#: lib/logingroupnav.php:79
@@ -2123,61 +2107,57 @@ msgstr ""
"contraseña antes de cambiar tu configuración."
#: actions/login.php:270
-#, fuzzy, php-format
+#, php-format
msgid ""
"Login with your username and password. Don't have a username yet? [Register]"
"(%%action.register%%) a new account."
msgstr ""
-"Inicia una sesión con tu usuario y contraseña. ¿Aún no tienes usuario? [Crea]"
-"(%%action.register%%) una cuenta nueva o prueba [OpenID] (%%action."
-"openidlogin%%). "
+"Inicia sesión con tu usuario y contraseña. ¿Aún no tienes usuario? [Crea](%%"
+"action.register%%) una cuenta."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
+"Sólo los administradores pueden convertir a un usuario en administrador."
-#: actions/makeadmin.php:95
-#, fuzzy, php-format
+#: actions/makeadmin.php:96
+#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "Usuario ya está bloqueado del grupo."
+msgstr "%1$s ya es un administrador del grupo \"%2$s\"."
-#: actions/makeadmin.php:132
-#, fuzzy, php-format
+#: actions/makeadmin.php:133
+#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "No se pudo eliminar a usuario %s de grupo %s"
+msgstr "No se puede obtener el registro de membresía de %1$s en el grupo %2$s."
-#: actions/makeadmin.php:145
-#, fuzzy, php-format
+#: actions/makeadmin.php:146
+#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Debes ser un admin para editar el grupo"
+msgstr "No es posible convertir a %1$s en administrador del grupo %2$s."
#: actions/microsummary.php:69
msgid "No current status"
msgstr "No existe estado actual"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
-msgstr "No existe ese aviso."
+msgstr "Nueva aplicación"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Debes estar conectado para crear un grupo"
+msgstr "Debes conectarte para registrar una aplicación."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Usa este formulario para crear un grupo nuevo."
+msgstr "Utiliza este formulario para registrar una nueva aplicación."
#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "Se requiere la URL fuente."
#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
msgid "Could not create application."
-msgstr "No se pudo crear favorito."
+msgstr "No se pudo crear la aplicación."
#: actions/newgroup.php:53
msgid "New group"
@@ -2210,14 +2190,13 @@ msgid ""
msgstr "No te auto envíes un mensaje; dícetelo a ti mismo."
#: actions/newmessage.php:181
-#, fuzzy
msgid "Message sent"
-msgstr "Mensaje"
+msgstr "Mensaje enviado"
#: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Direct message to %s sent."
-msgstr "Se envió mensaje directo a %s"
+msgstr "Se ha enviado un mensaje directo a %s."
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
@@ -2228,9 +2207,8 @@ msgid "New notice"
msgstr "Nuevo aviso"
#: actions/newnotice.php:211
-#, fuzzy
msgid "Notice posted"
-msgstr "Aviso publicado"
+msgstr "Mensaje publicado"
#: actions/noticesearch.php:68
#, php-format
@@ -2246,9 +2224,9 @@ msgid "Text search"
msgstr "Búsqueda de texto"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Busca \"%s\" en la Corriente"
+msgstr "Resultados de la búsqueda de \"%1$s\" en %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2256,6 +2234,8 @@ msgid ""
"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
"status_textarea=%s)!"
msgstr ""
+"Sé la primera persona en [publicar algo en este tema](%%%%action.newnotice%%%"
+"%?status_textarea=%s)!"
#: actions/noticesearch.php:124
#, php-format
@@ -2263,16 +2243,20 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and be the first to "
"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
msgstr ""
+"¿Por qué no [registras una cuenta](%%%%action.register%%%%) y te conviertes "
+"en la primera persona en [publicar algo en este tema](%%%%action.newnotice%%%"
+"%?status_textarea=%s)?"
#: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
msgid "Updates with \"%s\""
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "Actualizaciones con \"%s\""
#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Todas las actualizaciones que corresponden a la frase a buscar \"%s\""
+msgstr ""
+"¡Actualizaciones que contienen el término de búsqueda \"%1$s\" en %2$s!"
#: actions/nudge.php:85
msgid ""
@@ -2286,54 +2270,52 @@ msgid "Nudge sent"
msgstr "Se envió zumbido"
#: actions/nudge.php:97
-#, fuzzy
msgid "Nudge sent!"
-msgstr "¡Zumbido enviado!"
+msgstr "¡Codazo enviado!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Debes estar conectado para editar un grupo."
+msgstr "Debes estar conectado para listar tus aplicaciones."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Otras opciones"
+msgstr "Aplicaciones OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Aplicaciones que has registrado"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Aún no has registrado aplicación alguna."
#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Aplicaciones conectadas"
#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Has permitido a las siguientes aplicaciones acceder a tu cuenta."
#: actions/oauthconnectionssettings.php:175
-#, fuzzy
msgid "You are not a user of that application."
-msgstr "No eres miembro de ese grupo"
+msgstr "No eres un usuario de esa aplicación."
#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "No se puede revocar el acceso para la aplicación: "
#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "No has autorizado a ninguna aplicación utilizar tu cuenta."
#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
+"Los desarrolladores pueden editar la configuración de registro de sus "
+"aplicaciones "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2345,16 +2327,15 @@ msgid "%1$s's status on %2$s"
msgstr "estado de %1$s en %2$s"
#: actions/oembed.php:157
-#, fuzzy
msgid "content type "
-msgstr "Conectarse"
+msgstr "tipo de contenido "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Sólo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "No es un formato de dato soportado"
@@ -2367,9 +2348,8 @@ msgid "Notice Search"
msgstr "Búsqueda de avisos"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
-msgstr "Otras configuraciones"
+msgstr "Otros ajustes"
#: actions/othersettings.php:71
msgid "Manage various other options."
@@ -2377,59 +2357,52 @@ msgstr "Manejo de varias opciones adicionales."
#: actions/othersettings.php:108
msgid " (free service)"
-msgstr ""
+msgstr "  (servicio gratuito)"
#: actions/othersettings.php:116
msgid "Shorten URLs with"
-msgstr ""
+msgstr "Acortar las URL con"
#: actions/othersettings.php:117
msgid "Automatic shortening service to use."
msgstr "Servicio de acorte automático a usar."
#: actions/othersettings.php:122
-#, fuzzy
msgid "View profile designs"
-msgstr "Configuración del perfil"
+msgstr "Ver diseños de perfil"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
-msgstr ""
+msgstr "Ocultar o mostrar diseños de perfil."
#: actions/othersettings.php:153
-#, fuzzy
msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Servicio de acorte de URL demasiado largo (máx. 50 caracteres)."
+msgstr "El servicio de acortamiento de URL es muy largo (máx. 50 caracteres)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
-msgstr "Grupo no especificado."
+msgstr "No se ha especificado ID de usuario."
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
-msgstr "No se especificó perfil."
+msgstr "No se ha especificado un token de acceso."
#: actions/otp.php:90
-#, fuzzy
msgid "No login token requested."
-msgstr "Ningún perfil de Id en solicitud."
+msgstr "Token de acceso solicitado."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
-msgstr "El contenido del aviso es inválido"
+msgstr "Token de acceso inválido especificado."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
-msgstr "Ingresar a sitio"
+msgstr "Token de acceso caducado."
#: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
msgid "Outbox for %1$s - page %2$d"
-msgstr "Bandeja de salida para %s"
+msgstr "Bandeja de salida de %1$s - página %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2446,14 +2419,12 @@ msgid "Change password"
msgstr "Cambiar contraseña"
#: actions/passwordsettings.php:69
-#, fuzzy
msgid "Change your password."
-msgstr "Cambia tu contraseña."
+msgstr "Cambia tu contraseña"
#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
msgid "Password change"
-msgstr "Cambio de contraseña "
+msgstr "Cambio de contraseña"
#: actions/passwordsettings.php:104
msgid "Old password"
@@ -2513,9 +2484,9 @@ msgid "Path and server settings for this StatusNet site."
msgstr ""
#: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
msgid "Theme directory not readable: %s"
-msgstr "Esta página no está disponible en un "
+msgstr "Directorio de temas ilegible: %s"
#: actions/pathsadminpanel.php:163
#, php-format
@@ -2525,7 +2496,7 @@ msgstr ""
#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
-msgstr ""
+msgstr "Directorio de fondo ilegible: %s"
#: actions/pathsadminpanel.php:177
#, php-format
@@ -2534,18 +2505,16 @@ msgstr ""
#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "Servidor SSL no válido. La longitud máxima es de 255 caracteres."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#: lib/adminpanelaction.php:311
-#, fuzzy
msgid "Site"
-msgstr "Invitar"
+msgstr "Sitio"
#: actions/pathsadminpanel.php:238
-#, fuzzy
msgid "Server"
-msgstr "Recuperar"
+msgstr "Servidor"
#: actions/pathsadminpanel.php:238
msgid "Site's server hostname."
@@ -2578,11 +2547,11 @@ msgstr ""
#: actions/pathsadminpanel.php:259
msgid "Theme"
-msgstr ""
+msgstr "Tema"
#: actions/pathsadminpanel.php:264
msgid "Theme server"
-msgstr ""
+msgstr "Servidor de los temas"
#: actions/pathsadminpanel.php:268
msgid "Theme path"
@@ -2590,17 +2559,15 @@ msgstr ""
#: actions/pathsadminpanel.php:272
msgid "Theme directory"
-msgstr ""
+msgstr "Directorio de temas"
#: actions/pathsadminpanel.php:279
-#, fuzzy
msgid "Avatars"
-msgstr "Avatar"
+msgstr "Avatares"
#: actions/pathsadminpanel.php:284
-#, fuzzy
msgid "Avatar server"
-msgstr "Configuración de Avatar"
+msgstr "Servidor del avatar"
#: actions/pathsadminpanel.php:288
#, fuzzy
@@ -2608,17 +2575,16 @@ msgid "Avatar path"
msgstr "Avatar actualizado"
#: actions/pathsadminpanel.php:292
-#, fuzzy
msgid "Avatar directory"
-msgstr "Avatar actualizado"
+msgstr "Directorio del avatar"
#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
-msgstr ""
+msgstr "Fondos"
#: actions/pathsadminpanel.php:305
msgid "Background server"
-msgstr ""
+msgstr "Servidor de fondo"
#: actions/pathsadminpanel.php:309
msgid "Background path"
@@ -2626,39 +2592,35 @@ msgstr ""
#: actions/pathsadminpanel.php:313
msgid "Background directory"
-msgstr ""
+msgstr "Directorio del fondo"
#: actions/pathsadminpanel.php:320
-#, fuzzy
msgid "SSL"
-msgstr "SMS"
+msgstr "SSL"
#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
-#, fuzzy
msgid "Never"
-msgstr "Recuperar"
+msgstr "Nunca"
#: actions/pathsadminpanel.php:324
-#, fuzzy
msgid "Sometimes"
-msgstr "Avisos"
+msgstr "A veces"
#: actions/pathsadminpanel.php:325
msgid "Always"
-msgstr ""
+msgstr "Siempre"
#: actions/pathsadminpanel.php:329
msgid "Use SSL"
-msgstr ""
+msgstr "Usar SSL"
#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
-msgstr ""
+msgstr "Cuándo utilizar SSL"
#: actions/pathsadminpanel.php:335
-#, fuzzy
msgid "SSL server"
-msgstr "Recuperar"
+msgstr "Servidor SSL"
#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
@@ -2683,9 +2645,9 @@ msgid "People search"
msgstr "Buscador de gente"
#: actions/peopletag.php:70
-#, fuzzy, php-format
+#, php-format
msgid "Not a valid people tag: %s"
-msgstr "No es un tag de personas válido: %s"
+msgstr "No es una etiqueta válida para personas: %s"
#: actions/peopletag.php:144
#, fuzzy, php-format
@@ -2713,9 +2675,8 @@ msgstr ""
"sepa más sobre ti."
#: actions/profilesettings.php:99
-#, fuzzy
msgid "Profile information"
-msgstr "Información de perfil "
+msgstr "Información del perfil"
#: actions/profilesettings.php:108 lib/groupeditform.php:154
msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -2738,14 +2699,13 @@ msgid "URL of your homepage, blog, or profile on another site"
msgstr "El URL de tu página de inicio, blog o perfil en otro sitio"
#: actions/profilesettings.php:122 actions/register.php:461
-#, fuzzy, php-format
+#, php-format
msgid "Describe yourself and your interests in %d chars"
-msgstr "Cuéntanos algo sobre ti y tus intereses en 140 caracteres"
+msgstr "Descríbete y cuéntanos tus intereses en %d caracteres"
#: actions/profilesettings.php:125 actions/register.php:464
-#, fuzzy
msgid "Describe yourself and your interests"
-msgstr "Descríbete y cuenta de tus "
+msgstr "Descríbete y cuéntanos acerca de tus intereses"
#: actions/profilesettings.php:127 actions/register.php:466
msgid "Bio"
@@ -2801,9 +2761,9 @@ msgstr ""
"para no-humanos)"
#: actions/profilesettings.php:228 actions/register.php:223
-#, fuzzy, php-format
+#, php-format
msgid "Bio is too long (max %d chars)."
-msgstr "La biografía es demasiado larga (máx. 140 caracteres)."
+msgstr "La biografía es muy larga (máx. %d caracteres)."
#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
msgid "Timezone not selected."
@@ -2814,27 +2774,25 @@ msgid "Language is too long (max 50 chars)."
msgstr "Idioma es muy largo ( max 50 car.)"
#: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
msgid "Invalid tag: \"%s\""
-msgstr "Tag no válido: '%s' "
+msgstr "Etiqueta inválida: \"% s\""
#: actions/profilesettings.php:302
msgid "Couldn't update user for autosubscribe."
msgstr "No se pudo actualizar el usuario para autosuscribirse."
#: actions/profilesettings.php:359
-#, fuzzy
msgid "Couldn't save location prefs."
-msgstr "No se pudo guardar tags."
+msgstr "No se han podido guardar las preferencias de ubicación."
#: actions/profilesettings.php:371
msgid "Couldn't save profile."
msgstr "No se pudo guardar el perfil."
#: actions/profilesettings.php:379
-#, fuzzy
msgid "Couldn't save tags."
-msgstr "No se pudo guardar tags."
+msgstr "No se pudo guardar las etiquetas."
#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
msgid "Settings saved."
@@ -2843,16 +2801,16 @@ msgstr "Se guardó configuración."
#: actions/public.php:83
#, php-format
msgid "Beyond the page limit (%s)"
-msgstr ""
+msgstr "Más allá del límite de páginas (%s)"
#: actions/public.php:92
msgid "Could not retrieve public stream."
msgstr "No se pudo acceder a corriente pública."
#: actions/public.php:129
-#, fuzzy, php-format
+#, php-format
msgid "Public timeline, page %d"
-msgstr "Línea de tiempo pública, página %d"
+msgstr "Línea temporal pública, página %d"
#: actions/public.php:131 lib/publicgroupnav.php:79
msgid "Public timeline"
@@ -2879,10 +2837,12 @@ msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
+"Esta es la línea temporal pública de %%site.name%%, pero aún no se ha "
+"publicado nada."
#: actions/public.php:190
msgid "Be the first to post!"
-msgstr ""
+msgstr "¡Sé la primera persona en publicar algo!"
#: actions/public.php:194
#, php-format
@@ -2910,9 +2870,8 @@ msgstr ""
"wiki/Micro-blogging) "
#: actions/publictagcloud.php:57
-#, fuzzy
msgid "Public tag cloud"
-msgstr "Nube de tags pública"
+msgstr "Nube de etiquetas pública"
#: actions/publictagcloud.php:63
#, php-format
@@ -2926,7 +2885,7 @@ msgstr ""
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
-msgstr ""
+msgstr "¡Sé la primera persona en publicar!"
#: actions/publictagcloud.php:75
#, php-format
@@ -2978,14 +2937,16 @@ msgstr ""
#: actions/recoverpassword.php:158
msgid "You have been identified. Enter a new password below. "
msgstr ""
+"Se te ha identificado. Por favor, escribe una nueva contraseña a "
+"continuación. "
#: actions/recoverpassword.php:188
msgid "Password recovery"
-msgstr ""
+msgstr "Recuperación de contraseña"
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
-msgstr ""
+msgstr "Nombre de usuario o dirección de correo electrónico"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
@@ -3142,13 +3103,12 @@ msgid "Creative Commons Attribution 3.0"
msgstr ""
#: actions/register.php:497
-#, fuzzy
msgid ""
" except this private data: password, email address, IM address, and phone "
"number."
msgstr ""
-"excepto los siguientes datos privados: contraseña, dirección de correo "
-"electrónico, dirección de mensajería instantánea, número de teléfono."
+"con excepción de esta información privada: contraseña, dirección de correo "
+"electrónico, dirección de mensajería instantánea y número de teléfono."
#: actions/register.php:538
#, fuzzy, php-format
@@ -3208,17 +3168,16 @@ msgid "Remote subscribe"
msgstr "Subscripción remota"
#: actions/remotesubscribe.php:124
-#, fuzzy
msgid "Subscribe to a remote user"
-msgstr "Suscribirse a este usuario"
+msgstr "Suscribirse a un usuario remoto"
#: actions/remotesubscribe.php:129
msgid "User nickname"
-msgstr "Apodo del usuario"
+msgstr "Usuario"
#: actions/remotesubscribe.php:130
msgid "Nickname of the user you want to follow"
-msgstr "Apodo del usuario que quieres seguir"
+msgstr "Usuario a quien quieres seguir"
#: actions/remotesubscribe.php:133
msgid "Profile URL"
@@ -3238,49 +3197,42 @@ msgid "Invalid profile URL (bad format)"
msgstr "El URL del perfil es inválido (formato incorrecto)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "URL de perfil no válido (ningún documento YADIS)."
+msgstr ""
+"No es un perfil válido URL (no se ha definido un documento YADIS o un XRDS "
+"inválido)."
#: actions/remotesubscribe.php:176
-#, fuzzy
msgid "That’s a local profile! Login to subscribe."
-msgstr "¡Es un perfil local! Ingresa para suscribirte"
+msgstr "¡Este es un perfil local! Ingresa para suscribirte"
#: actions/remotesubscribe.php:183
-#, fuzzy
msgid "Couldn’t get a request token."
-msgstr "No se pudo obtener la señal de petición."
+msgstr "No se pudo obtener un token de solicitud"
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Sólo el usuario puede leer sus bandejas de correo."
+msgstr "Sólo los usuarios que hayan accedido pueden repetir mensajes."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "No se especificó perfil."
+msgstr "No se ha especificado un mensaje."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr "No puedes registrarte si no estás de acuerdo con la licencia."
+msgstr "No puedes repetir tus propios mensajes."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Ya has bloqueado este usuario."
+msgstr "Ya has repetido este mensaje."
#: actions/repeat.php:114 lib/noticelist.php:642
-#, fuzzy
msgid "Repeated"
-msgstr "Crear"
+msgstr "Repetido"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Crear"
+msgstr "¡Repetido!"
#: actions/replies.php:125 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -3289,9 +3241,9 @@ msgid "Replies to %s"
msgstr "Respuestas a %s"
#: actions/replies.php:127
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s, page %2$d"
-msgstr "Respuestas a %1$s en %2$s!"
+msgstr "Respuestas a %1$s, página %2$d"
#: actions/replies.php:144
#, fuzzy, php-format
@@ -3335,9 +3287,8 @@ msgid "Replies to %1$s on %2$s!"
msgstr "Respuestas a %1$s en %2$s!"
#: actions/rsd.php:146 actions/version.php:157
-#, fuzzy
msgid "StatusNet"
-msgstr "Status borrado."
+msgstr "StatusNet"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
@@ -3356,11 +3307,11 @@ msgstr "Sesiones"
#: actions/sessionsadminpanel.php:65
msgid "Session settings for this StatusNet site."
-msgstr ""
+msgstr "Configuración de sesión para este sitio StatusNet."
#: actions/sessionsadminpanel.php:175
msgid "Handle sessions"
-msgstr ""
+msgstr "Gestionar sesiones"
#: actions/sessionsadminpanel.php:177
msgid "Whether to handle sessions ourselves."
@@ -3386,24 +3337,21 @@ msgid "You must be logged in to view an application."
msgstr "Debes estar conectado para dejar un grupo."
#: actions/showapplication.php:157
-#, fuzzy
msgid "Application profile"
-msgstr "Aviso sin perfil"
+msgstr "Perfil de la aplicación"
#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Icono"
#: actions/showapplication.php:169 actions/version.php:195
#: lib/applicationeditform.php:195
-#, fuzzy
msgid "Name"
-msgstr "Apodo"
+msgstr "Nombre"
#: actions/showapplication.php:178 lib/applicationeditform.php:222
-#, fuzzy
msgid "Organization"
-msgstr "Paginación"
+msgstr "Organización"
#: actions/showapplication.php:187 actions/version.php:198
#: lib/applicationeditform.php:209 lib/groupeditform.php:172
@@ -3422,7 +3370,7 @@ msgstr ""
#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "Acciones de la aplicación"
#: actions/showapplication.php:236
msgid "Reset key & secret"
@@ -3430,7 +3378,7 @@ msgstr ""
#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Información de la aplicación"
#: actions/showapplication.php:263
msgid "Consumer key"
@@ -3450,7 +3398,7 @@ msgstr ""
#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr ""
+msgstr "Autorizar URL"
#: actions/showapplication.php:288
msgid ""
@@ -3523,9 +3471,8 @@ msgid "%1$s group, page %2$d"
msgstr "Miembros del grupo %s, página %d"
#: actions/showgroup.php:218
-#, fuzzy
msgid "Group profile"
-msgstr "Perfil de grupo"
+msgstr "Perfil del grupo"
#: actions/showgroup.php:263 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
@@ -3534,13 +3481,12 @@ msgstr "URL"
#: actions/showgroup.php:274 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
-#, fuzzy
msgid "Note"
msgstr "Nota"
#: actions/showgroup.php:284 lib/groupeditform.php:184
msgid "Aliases"
-msgstr ""
+msgstr "Alias"
#: actions/showgroup.php:293
msgid "Group actions"
@@ -3582,9 +3528,8 @@ msgid "All members"
msgstr "Todos los miembros"
#: actions/showgroup.php:432
-#, fuzzy
msgid "Created"
-msgstr "Crear"
+msgstr "Creado"
#: actions/showgroup.php:448
#, php-format
@@ -3608,9 +3553,8 @@ msgstr ""
"blogging](http://en.wikipedia.org/wiki/Micro-blogging) "
#: actions/showgroup.php:482
-#, fuzzy
msgid "Admins"
-msgstr "Admin"
+msgstr "Administradores"
#: actions/showmessage.php:81
msgid "No such message."
@@ -3635,14 +3579,14 @@ msgid "Notice deleted."
msgstr "Aviso borrado"
#: actions/showstream.php:73
-#, fuzzy, php-format
+#, php-format
msgid " tagged %s"
-msgstr "Avisos marcados con %s"
+msgstr "%s etiquetados"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "%s y amigos, página %d"
+msgstr "%1$s, página %2$d"
#: actions/showstream.php:122
#, fuzzy, php-format
@@ -3723,7 +3667,7 @@ msgstr "El usuario te ha bloqueado."
#: actions/siteadminpanel.php:69
msgid "Basic settings for this StatusNet site."
-msgstr ""
+msgstr "Configuración básica de este sitio StatusNet."
#: actions/siteadminpanel.php:132
msgid "Site name must have non-zero length."
@@ -3737,7 +3681,7 @@ msgstr "No es una dirección de correo electrónico válida"
#: actions/siteadminpanel.php:158
#, php-format
msgid "Unknown language \"%s\"."
-msgstr ""
+msgstr "Idioma desconocido \"%s\"."
#: actions/siteadminpanel.php:165
msgid "Invalid snapshot report URL."
@@ -3761,12 +3705,11 @@ msgstr ""
#: actions/siteadminpanel.php:239
msgid "General"
-msgstr ""
+msgstr "General"
#: actions/siteadminpanel.php:242
-#, fuzzy
msgid "Site name"
-msgstr "Aviso de sitio"
+msgstr "Nombre del sitio"
#: actions/siteadminpanel.php:243
msgid "The name of your site, like \"Yourcompany Microblog\""
@@ -3800,11 +3743,11 @@ msgstr "Vistas locales"
#: actions/siteadminpanel.php:274
msgid "Default timezone"
-msgstr ""
+msgstr "Zona horaria predeterminada"
#: actions/siteadminpanel.php:275
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Zona horaria predeterminada del sitio; generalmente UTC."
#: actions/siteadminpanel.php:281
#, fuzzy
@@ -3845,19 +3788,19 @@ msgstr ""
#: actions/siteadminpanel.php:308
msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgstr "Las capturas se enviarán a este URL"
#: actions/siteadminpanel.php:315
msgid "Limits"
-msgstr ""
+msgstr "Límites"
#: actions/siteadminpanel.php:318
msgid "Text limit"
-msgstr ""
+msgstr "Límite de texto"
#: actions/siteadminpanel.php:318
msgid "Maximum number of characters for notices."
-msgstr ""
+msgstr "Cantidad máxima de caracteres para los mensajes."
#: actions/siteadminpanel.php:322
msgid "Dupe limit"
@@ -3868,9 +3811,8 @@ msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
#: actions/smssettings.php:58
-#, fuzzy
msgid "SMS settings"
-msgstr "Preferencias SMS"
+msgstr "Configuración de SMS"
#: actions/smssettings.php:69
#, php-format
@@ -3899,9 +3841,8 @@ msgid "Enter the code you received on your phone."
msgstr "Ingrese el código recibido en su teléfono"
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
-msgstr "Número telefónico para sms"
+msgstr "Número de teléfono de SMS"
#: actions/smssettings.php:140
msgid "Phone number, no punctuation or spaces, with area code"
@@ -3950,9 +3891,8 @@ msgid "That is not your phone number."
msgstr "Ese no es tu número telefónico"
#: actions/smssettings.php:465
-#, fuzzy
msgid "Mobile carrier"
-msgstr "Operador móvil"
+msgstr "Operador de telefonía móvil"
#: actions/smssettings.php:469
msgid "Select a carrier"
@@ -3988,7 +3928,6 @@ msgid "Not a local user."
msgstr "No es usuario local."
#: actions/subscribe.php:69
-#, fuzzy
msgid "Subscribed"
msgstr "Suscrito"
@@ -4103,7 +4042,6 @@ msgid "Tag %s"
msgstr "%s tag"
#: actions/tagother.php:77 lib/userprofile.php:75
-#, fuzzy
msgid "User profile"
msgstr "Perfil de usuario"
@@ -4131,9 +4069,8 @@ msgstr ""
"suscritas a ti."
#: actions/tagother.php:200
-#, fuzzy
msgid "Could not save tags."
-msgstr "No se pudo guardar tags."
+msgstr "No se han podido guardar las etiquetas."
#: actions/tagother.php:236
msgid "Use this form to add tags to your subscribers or subscriptions."
@@ -4218,16 +4155,15 @@ msgstr "Nuevos usuarios"
#: actions/useradminpanel.php:234
msgid "New user welcome"
-msgstr ""
+msgstr "Bienvenida a nuevos usuarios"
#: actions/useradminpanel.php:235
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
#: actions/useradminpanel.php:240
-#, fuzzy
msgid "Default subscription"
-msgstr "Todas las suscripciones"
+msgstr "Suscripción predeterminada"
#: actions/useradminpanel.php:241
#, fuzzy
@@ -4355,9 +4291,8 @@ msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipo de imagen incorrecto para '%s'"
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
msgid "Profile design"
-msgstr "Configuración del perfil"
+msgstr "Diseño del perfil"
#: actions/userdesignsettings.php:87 lib/designsettings.php:76
msgid ""
@@ -4375,9 +4310,8 @@ msgid "%1$s groups, page %2$d"
msgstr "Miembros del grupo %s, página %d"
#: actions/usergroups.php:130
-#, fuzzy
msgid "Search for more groups"
-msgstr "Buscar personas o texto"
+msgstr "Buscar más grupos"
#: actions/usergroups.php:153
#, fuzzy, php-format
@@ -4400,10 +4334,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
+"Este sitio ha sido desarrollado con %1$s, versión %2$s, Derechos Reservados "
+"2008-2010 StatusNet, Inc. y sus colaboradores."
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "Colaboradores"
#: actions/version.php:168
msgid ""
@@ -4430,7 +4366,7 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "Complementos"
#: actions/version.php:196 lib/action.php:747
#, fuzzy
@@ -4439,7 +4375,7 @@ msgstr "Sesiones"
#: actions/version.php:197
msgid "Author(s)"
-msgstr ""
+msgstr "Autor(es)"
#: classes/File.php:144
#, php-format
@@ -4464,9 +4400,8 @@ msgid "Group join failed."
msgstr "Perfil de grupo"
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "No se pudo actualizar el grupo."
+msgstr "No es parte del grupo."
#: classes/Group_member.php:60
#, fuzzy
@@ -4497,14 +4432,12 @@ msgid "DB error inserting hashtag: %s"
msgstr "Error de la BD al insertar la etiqueta clave: %s"
#: classes/Notice.php:214
-#, fuzzy
msgid "Problem saving notice. Too long."
-msgstr "Hubo un problema al guardar el aviso."
+msgstr "Ha habido un problema al guardar el mensaje. Es muy largo."
#: classes/Notice.php:218
-#, fuzzy
msgid "Problem saving notice. Unknown user."
-msgstr "Hubo problemas al guardar el aviso. Usuario desconocido."
+msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido."
#: classes/Notice.php:223
msgid ""
@@ -4540,7 +4473,7 @@ msgstr "Hubo un problema al guardar el aviso."
msgid "DB error inserting reply: %s"
msgstr "Error de BD al insertar respuesta: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1271
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4550,11 +4483,11 @@ msgstr "RT @%1$s %2$s"
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenido a %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:413
msgid "Could not create group."
msgstr "No se pudo crear grupo."
-#: classes/User_group.php:409
+#: classes/User_group.php:442
#, fuzzy
msgid "Could not set group membership."
msgstr "No se pudo configurar miembros de grupo."
@@ -4588,9 +4521,9 @@ msgid "Other options"
msgstr "Otras opciones"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
@@ -4621,9 +4554,8 @@ msgid "Connect to services"
msgstr "Conectar a los servicios"
#: lib/action.php:448
-#, fuzzy
msgid "Change site configuration"
-msgstr "Navegación de sitio primario"
+msgstr "Cambiar la configuración del sitio"
#: lib/action.php:452 lib/subgroupnav.php:105
msgid "Invite"
@@ -4756,6 +4688,8 @@ msgstr ""
#: lib/action.php:814
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
+"Derechos de autor de contenido y datos por los colaboradores. Todos los "
+"derechos reservados."
#: lib/action.php:826
msgid "All "
@@ -4778,9 +4712,8 @@ msgid "Before"
msgstr "Antes"
#: lib/adminpanelaction.php:96
-#, fuzzy
msgid "You cannot make changes to this site."
-msgstr "No puedes enviar mensaje a este usuario."
+msgstr "No puedes hacer cambios a este sitio."
#: lib/adminpanelaction.php:107
#, fuzzy
@@ -4818,9 +4751,8 @@ msgid "User configuration"
msgstr "SMS confirmación"
#: lib/adminpanelaction.php:327
-#, fuzzy
msgid "Access configuration"
-msgstr "SMS confirmación"
+msgstr "Configuración de acceso"
#: lib/adminpanelaction.php:332
#, fuzzy
@@ -4828,9 +4760,8 @@ msgid "Paths configuration"
msgstr "SMS confirmación"
#: lib/adminpanelaction.php:337
-#, fuzzy
msgid "Sessions configuration"
-msgstr "SMS confirmación"
+msgstr "Configuración de sesiones"
#: lib/apiauth.php:95
msgid "API resource requires read-write access, but you only have read access."
@@ -5162,8 +5093,8 @@ msgstr "No eres miembro de ningún grupo"
#: lib/command.php:714
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
-msgstr[0] "No eres miembro de este grupo."
-msgstr[1] "No eres miembro de este grupo."
+msgstr[0] "Eres miembro de este grupo:"
+msgstr[1] "Eres miembro de estos grupos:"
#: lib/command.php:728
msgid ""
@@ -6138,47 +6069,47 @@ msgstr "Mensaje"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:867
+#: lib/util.php:871
msgid "a few seconds ago"
msgstr "hace unos segundos"
-#: lib/util.php:869
+#: lib/util.php:873
msgid "about a minute ago"
msgstr "hace un minuto"
-#: lib/util.php:871
+#: lib/util.php:875
#, php-format
msgid "about %d minutes ago"
msgstr "hace %d minutos"
-#: lib/util.php:873
+#: lib/util.php:877
msgid "about an hour ago"
msgstr "hace una hora"
-#: lib/util.php:875
+#: lib/util.php:879
#, php-format
msgid "about %d hours ago"
msgstr "hace %d horas"
-#: lib/util.php:877
+#: lib/util.php:881
msgid "about a day ago"
msgstr "hace un día"
-#: lib/util.php:879
+#: lib/util.php:883
#, php-format
msgid "about %d days ago"
msgstr "hace %d días"
-#: lib/util.php:881
+#: lib/util.php:885
msgid "about a month ago"
msgstr "hace un mes"
-#: lib/util.php:883
+#: lib/util.php:887
#, php-format
msgid "about %d months ago"
msgstr "hace %d meses"
-#: lib/util.php:885
+#: lib/util.php:889
msgid "about a year ago"
msgstr "hace un año"
diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po
index ae528ab7b..c749a4161 100644
--- a/locale/fa/LC_MESSAGES/statusnet.po
+++ b/locale/fa/LC_MESSAGES/statusnet.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:05+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:41+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-Language-Code: fa\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
@@ -200,7 +200,7 @@ msgstr "به روز رسانی از %1$ و دوستان در %2$"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "رابط مورد نظر پیدا نشد."
@@ -822,7 +822,7 @@ msgstr "کاربر را مسدود نکن"
msgid "Yes"
msgstr "بله"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "کاربر را مسدود کن"
@@ -1597,7 +1597,7 @@ msgstr "هم اکنون دسترسی کاربر به گروه مسدود شده
msgid "User is not a member of group."
msgstr "کاربر عضو گروه نیست."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "دسترسی کاربر به گروه را مسدود کن"
@@ -1693,19 +1693,19 @@ msgstr "یک Ùهرست از کاربران در این گروه"
msgid "Admin"
msgstr "مدیر"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "بازداشتن"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "کاربر یک مدیر گروه شود"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "مدیر شود"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "این کاربر یک مدیر شود"
@@ -2080,21 +2080,21 @@ msgstr ""
"با نام‌کاربری و گذزواژه‌ی خود وارد شوید. نام‌کاربری ندارید؟ یک نام‌کاربری [ثبت ]"
"(%%action.register%%) کنید."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Ùقط یک مدیر می‌تواند کاربر دیگری را مدیر کند."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s از قبل مدیر گروه %s بود."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "نمی‌توان اطلاعات عضویت %s را در گروه %s به دست آورد."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "نمی‌توان %s را مدیر گروه %s کرد."
@@ -2301,8 +2301,8 @@ msgstr "نوع محتوا "
msgid "Only "
msgstr " Ùقط"
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست."
@@ -4369,7 +4369,7 @@ msgstr "مشکل در ذخیره کردن آگهی."
msgid "DB error inserting reply: %s"
msgstr ""
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -5917,47 +5917,47 @@ msgstr "پیام"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "چند ثانیه پیش"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "حدود یک دقیقه پیش"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "حدود %d دقیقه پیش"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "حدود یک ساعت پیش"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "حدود %d ساعت پیش"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "حدود یک روز پیش"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "حدود %d روز پیش"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "حدود یک ماه پیش"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "حدود %d ماه پیش"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "حدود یک سال پیش"
diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po
index aa53f81cd..80a85e1d1 100644
--- a/locale/fi/LC_MESSAGES/statusnet.po
+++ b/locale/fi/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:02+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:39+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"
@@ -202,7 +202,7 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metodia ei löytynyt!"
@@ -837,7 +837,7 @@ msgstr "Älä estä tätä käyttäjää"
msgid "Yes"
msgstr "Kyllä"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Estä tämä käyttäjä"
@@ -1628,7 +1628,7 @@ msgstr "Käyttäjä on asettanut eston sinulle."
msgid "User is not a member of group."
msgstr "Käyttäjä ei kuulu tähän ryhmään."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Estä käyttäjä ryhmästä"
@@ -1726,19 +1726,19 @@ msgstr "Lista ryhmän käyttäjistä."
msgid "Admin"
msgstr "Ylläpito"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Estä"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Tee tästä käyttäjästä ylläpitäjä"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Tee ylläpitäjäksi"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Tee tästä käyttäjästä ylläpitäjä"
@@ -2144,21 +2144,21 @@ msgstr ""
"käyttäjätunnusta? [Rekisteröi](%%action.register%%) käyttäjätunnus tai "
"kokeile [OpenID](%%action.openidlogin%%)-tunnuksella sisään kirjautumista. "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Vain ylläpitäjä voi tehdä toisesta käyttäjästä ylläpitäjän."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s on jo ryhmän \"%s\" ylläpitäjä."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ei saatu käyttäjän %s jäsenyystietoja ryhmästä %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ei voitu tehdä käyttäjästä %s ylläpitäjää ryhmään %s"
@@ -2365,8 +2365,8 @@ msgstr "Yhdistä"
msgid "Only "
msgstr "Vain "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Tuo ei ole tuettu tietomuoto."
@@ -4542,7 +4542,7 @@ msgstr "Ongelma päivityksen tallentamisessa."
msgid "DB error inserting reply: %s"
msgstr "Tietokantavirhe tallennettaessa vastausta: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -6159,47 +6159,47 @@ msgstr "Viesti"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "muutama sekunti sitten"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "noin minuutti sitten"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "noin %d minuuttia sitten"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "noin tunti sitten"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "noin %d tuntia sitten"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "noin päivä sitten"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "noin %d päivää sitten"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "noin kuukausi sitten"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "noin %d kuukautta sitten"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "noin vuosi sitten"
diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po
index 352d6bd70..9fb5e88b2 100644
--- a/locale/fr/LC_MESSAGES/statusnet.po
+++ b/locale/fr/LC_MESSAGES/statusnet.po
@@ -14,12 +14,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:09+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:44+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
@@ -202,7 +202,7 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Méthode API non trouvée !"
@@ -838,7 +838,7 @@ msgstr "Ne pas bloquer cet utilisateur"
msgid "Yes"
msgstr "Oui"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquer cet utilisateur"
@@ -1599,7 +1599,7 @@ msgstr "Cet utilisateur est déjà bloqué pour le groupe."
msgid "User is not a member of group."
msgstr "L’utilisateur n’est pas membre du groupe."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Bloquer cet utilisateur du groupe"
@@ -1702,19 +1702,19 @@ msgstr "Liste des utilisateurs inscrits à ce groupe."
msgid "Admin"
msgstr "Administrer"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Bloquer"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Faire de cet utilisateur un administrateur du groupe"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Faire un administrateur"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Faire de cet utilisateur un administrateur"
@@ -2134,24 +2134,24 @@ msgstr ""
"pas encore d’identifiant ? [Créez-vous](%%action.register%%) un nouveau "
"compte."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Seul un administrateur peut faire d’un autre utilisateur un administrateur."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s est déjà administrateur du groupe « %2$s »."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr ""
"Impossible d’obtenir les enregistrements d’appartenance pour %1$s dans le "
"groupe %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Impossible de rendre %1$s administrateur du groupe %2$s."
@@ -2356,8 +2356,8 @@ msgstr "type de contenu "
msgid "Only "
msgstr "Seulement "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Format de données non supporté."
@@ -4546,7 +4546,7 @@ msgstr "Problème lors de l’enregistrement de la boîte de réception du group
msgid "DB error inserting reply: %s"
msgstr "Erreur de base de donnée en insérant la réponse :%s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4590,7 +4590,7 @@ msgstr "Autres "
#: lib/accountsettingsaction.php:128
msgid "Other options"
-msgstr "Autres options "
+msgstr "Autres options"
#: lib/action.php:144
#, php-format
@@ -6231,47 +6231,47 @@ msgstr "Message"
msgid "Moderate"
msgstr "Modérer"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "il y a quelques secondes"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "il y a 1 minute"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "il y a %d minutes"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "il y a 1 heure"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "il y a %d heures"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "il y a 1 jour"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "il y a %d jours"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "il y a 1 mois"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "il y a %d mois"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "il y a environ 1 an"
diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po
index 9bd8a6ff8..0358b8ecd 100644
--- a/locale/ga/LC_MESSAGES/statusnet.po
+++ b/locale/ga/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:12+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:47+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n"
@@ -197,7 +197,7 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Método da API non atopado"
@@ -843,7 +843,7 @@ msgstr "Bloquear usuario"
msgid "Yes"
msgstr "Si"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Bloquear usuario"
@@ -1654,7 +1654,7 @@ msgstr "O usuario bloqueoute."
msgid "User is not a member of group."
msgstr "%1s non é unha orixe fiable."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "Bloquear usuario"
@@ -1760,19 +1760,19 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2176,21 +2176,21 @@ msgstr ""
"(%%action.register%%) unha nova conta, ou accede co teu enderezo [OpenID](%%"
"action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "O usuario bloqueoute."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "O usuario bloqueoute."
@@ -2396,8 +2396,8 @@ msgstr "Conectar"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Non é un formato de datos soportado."
@@ -4599,7 +4599,7 @@ msgstr "Aconteceu un erro ó gardar o chío."
msgid "DB error inserting reply: %s"
msgstr "Erro ó inserir a contestación na BD: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -6336,47 +6336,47 @@ msgstr "Nova mensaxe"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "fai uns segundos"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "fai un minuto"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "fai %d minutos"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "fai unha hora"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "fai %d horas"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "fai un día"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "fai %d días"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "fai un mes"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "fai %d meses"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "fai un ano"
diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po
index 829ca11cf..fb8f12031 100644
--- a/locale/he/LC_MESSAGES/statusnet.po
+++ b/locale/he/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:15+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:50+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"
@@ -194,7 +194,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "קוד ×”×ישור ×œ× × ×ž×¦×."
@@ -833,7 +833,7 @@ msgstr "×ין משתמש ×›×–×”."
msgid "Yes"
msgstr "כן"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "×ין משתמש ×›×–×”."
@@ -1626,7 +1626,7 @@ msgstr "למשתמש ×ין פרופיל."
msgid "User is not a member of group."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "×ין משתמש ×›×–×”."
@@ -1731,19 +1731,19 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2113,21 +2113,21 @@ msgstr ""
"היכנס בעזרת ×©× ×”×ž×©×ª×ž×© והסיסמה שלך. עדיין ×ין לך ×©× ×ž×©×ª×ž×©? [הרש×](%%action."
"register%%) לחשבון "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "למשתמש ×ין פרופיל."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "נכשלה יצירת OpenID מתוך: %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "למשתמש ×ין פרופיל."
@@ -2327,8 +2327,8 @@ msgstr "התחבר"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4444,7 +4444,7 @@ msgstr "בעיה בשמירת ההודעה."
msgid "DB error inserting reply: %s"
msgstr "שגי×ת מסד × ×ª×•× ×™× ×‘×”×›× ×¡×ª התגובה: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -6060,47 +6060,47 @@ msgstr "הודעה חדשה"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "לפני מספר שניות"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "לפני כדקה"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "לפני כ-%d דקות"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "לפני כשעה"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "לפני כ-%d שעות"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "לפני כיו×"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "לפני ×›-%d ימי×"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "לפני כחודש"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "לפני ×›-%d חודשי×"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "לפני כשנה"
diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po
index 06cac6471..daecf17e8 100644
--- a/locale/hsb/LC_MESSAGES/statusnet.po
+++ b/locale/hsb/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:18+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:54+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n"
@@ -192,7 +192,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metoda njenamakana."
@@ -805,7 +805,7 @@ msgstr "Tutoho wužiwarja njeblokować"
msgid "Yes"
msgstr "Haj"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Tutoho wužiwarja blokować"
@@ -1553,7 +1553,7 @@ msgstr "Wužiwar je hižo za skupinu zablokowany."
msgid "User is not a member of group."
msgstr "Wužiwar njeje ÄÅ‚on skupiny."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Wužiwarja za skupinu blokować"
@@ -1650,19 +1650,19 @@ msgstr "Lisćina wužiwarjow w tutej skupinje."
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blokować"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Tutoho wužiwarja k administratorej Äinić"
@@ -2012,21 +2012,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Jenož administrator móže druheho wužiwarja k administratorej Äinić."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s je hižo administrator za skupinu \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "PÅ™istup na datowu sadźbu ÄÅ‚ona %1$S w skupinje %2$s móžno njeje."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Njeje móžno %1$S k administratorej w skupinje %2$s Äinić."
@@ -2219,8 +2219,8 @@ msgstr ""
msgid "Only "
msgstr "Jenož "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Njeje podpěrany datowy format."
@@ -4241,7 +4241,7 @@ msgstr ""
msgid "DB error inserting reply: %s"
msgstr ""
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -5773,47 +5773,47 @@ msgstr "Powěsć"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "před něšto sekundami"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "před něhdźe jednej mjeńšinu"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "před %d mjeńšinami"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "před něhdźe jednej hodźinu"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "před něhdźe %d hodźinami"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "před něhdźe jednym dnjom"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "před něhdźe %d dnjemi"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "před něhdźe jednym měsacom"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "před něhdźe %d měsacami"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "před něhdźe jednym lětom"
diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po
index 39b2a11a5..698f779dd 100644
--- a/locale/ia/LC_MESSAGES/statusnet.po
+++ b/locale/ia/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:22+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:14:57+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n"
@@ -37,7 +37,7 @@ msgstr "Private"
#: actions/accessadminpanel.php:163
msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "Prohiber al usatores anonyme (sin session aperte) de vider le sito?"
+msgstr "Prohibir al usatores anonyme (sin session aperte) de vider le sito?"
#: actions/accessadminpanel.php:167
msgid "Invite only"
@@ -195,7 +195,7 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Methodo API non trovate."
@@ -707,7 +707,7 @@ msgstr "Non trovate."
#: actions/attachment.php:73
msgid "No such attachment."
-msgstr "Attachamento non existe."
+msgstr "Annexo non existe."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -733,7 +733,8 @@ msgstr "Avatar"
#: actions/avatarsettings.php:78
#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Tu pote cargar tu avatar personal. Le dimension maxime del file es %s."
+msgstr ""
+"Tu pote incargar tu avatar personal. Le dimension maximal del file es %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
@@ -763,7 +764,7 @@ msgstr "Deler"
#: actions/avatarsettings.php:166 actions/grouplogo.php:233
msgid "Upload"
-msgstr "Cargar"
+msgstr "Incargar"
#: actions/avatarsettings.php:231 actions/grouplogo.php:286
msgid "Crop"
@@ -823,7 +824,7 @@ msgstr "Non blocar iste usator"
msgid "Yes"
msgstr "Si"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Blocar iste usator"
@@ -1079,8 +1080,8 @@ msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-"Tu pote cargar un imagine de fundo pro le sito. Le dimension maxime del file "
-"es %1$s."
+"Tu pote incargar un imagine de fundo pro le sito. Le dimension maximal del "
+"file es %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
@@ -1334,7 +1335,7 @@ msgstr "Inviar me e-mail quando alcuno me invia un message private."
#: actions/emailsettings.php:174
msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "Inviar me e-mail quando alcuno me invia un \"@-responsa\"."
+msgstr "Inviar me e-mail quando alcuno me invia un \"responsa @\"."
#: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email."
@@ -1508,11 +1509,11 @@ msgstr "Nulle nota."
#: actions/file.php:42
msgid "No attachments."
-msgstr "Nulle attachamento."
+msgstr "Nulle annexo."
#: actions/file.php:51
msgid "No uploaded attachments."
-msgstr "Nulle attachamento cargate."
+msgstr "Nulle annexo incargate."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -1583,7 +1584,7 @@ msgstr "Le usator es ja blocate del gruppo."
msgid "User is not a member of group."
msgstr "Le usator non es membro del gruppo."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Blocar usator del gruppo"
@@ -1648,8 +1649,8 @@ msgstr "Logotypo del gruppo"
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-"Tu pote cargar un imagine pro le logotypo de tu gruppo. Le dimension maxime "
-"del file es %s."
+"Tu pote incargar un imagine pro le logotypo de tu gruppo. Le dimension "
+"maximal del file es %s."
#: actions/grouplogo.php:178
msgid "User without matching profile."
@@ -1685,19 +1686,19 @@ msgstr "Un lista de usatores in iste gruppo."
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blocar"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Facer le usator administrator del gruppo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Facer administrator"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Facer iste usator administrator"
@@ -1923,7 +1924,7 @@ msgstr "Tu es a subscribite a iste usatores:"
#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
#, php-format
msgid "%1$s (%2$s)"
-msgstr ""
+msgstr "%1$s (%2$s)"
#: actions/invite.php:136
msgid ""
@@ -2105,23 +2106,23 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
"Aperi un session con tu nomine de usator e contrasigno. Non ha ancora un "
-"nomine de usator? [Registra](%%action.register%%) un nove conto."
+"nomine de usator? [Crea](%%action.register%%) un nove conto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Solmente un administrator pote facer un altere usator administrator."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s es ja administrator del gruppo \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Non pote obtener le datos del membrato de %1$s in le gruppo %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Non pote facer %1$s administrator del gruppo %2$s."
@@ -2326,8 +2327,8 @@ msgstr "typo de contento "
msgid "Only "
msgstr "Solmente "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Formato de datos non supportate."
@@ -2497,7 +2498,7 @@ msgstr "Directorio de localitates non scriptibile: %s"
#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr "Servitor SSL invalide. Le longitude maxime es 255 characteres."
+msgstr "Servitor SSL invalide. Le longitude maximal es 255 characteres."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#: lib/adminpanelaction.php:311
@@ -2876,7 +2877,7 @@ msgstr "Istes es le etiquettas recente le plus popular in %s "
#, php-format
msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
msgstr ""
-"Nulle persona ha ancora publicate un nota con un [hashtag](%%doc.tags%%) yet."
+"Nulle persona ha ancora publicate un nota con un [hashtag](%%doc.tags%%)."
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
@@ -3034,7 +3035,7 @@ msgstr "Registration succedite"
#: actions/register.php:114 actions/register.php:503 lib/action.php:463
#: lib/logingroupnav.php:85
msgid "Register"
-msgstr "Crear un conto"
+msgstr "Crear conto"
#: actions/register.php:135
msgid "Registration not allowed."
@@ -3042,8 +3043,7 @@ msgstr "Registration non permittite."
#: actions/register.php:198
msgid "You can't register if you don't agree to the license."
-msgstr ""
-"Tu non pote registrar te si tu non te declara de accordo con le licentia."
+msgstr "Tu non pote crear un conto si tu non accepta le licentia."
#: actions/register.php:212
msgid "Email address already exists."
@@ -3063,15 +3063,15 @@ msgstr ""
#: actions/register.php:425
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr "1-64 minusculas o numeros, sin punctuation o spatios. Requisite."
+msgstr "1-64 minusculas o numeros, sin punctuation o spatios. Requirite."
#: actions/register.php:430
msgid "6 or more characters. Required."
-msgstr "6 o plus characteres. Requisite."
+msgstr "6 o plus characteres. Requirite."
#: actions/register.php:434
msgid "Same as password above. Required."
-msgstr "Identic al contrasigno hic supra. Requisite."
+msgstr "Identic al contrasigno hic supra. Requirite."
#: actions/register.php:438 actions/register.php:442
#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
@@ -3090,7 +3090,7 @@ msgstr "Nomine plus longe, preferibilemente tu nomine \"real\""
#: actions/register.php:494
msgid "My text and files are available under "
-msgstr "Mi texto e files es disponibile sub "
+msgstr "Mi texto e files es disponibile sub le licentia "
#: actions/register.php:496
msgid "Creative Commons Attribution 3.0"
@@ -3715,7 +3715,7 @@ msgstr "Le frequentia de instantaneos debe esser un numero."
#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
-msgstr "Le limite minime del texto es 140 characteres."
+msgstr "Le limite minimal del texto es 140 characteres."
#: actions/siteadminpanel.php:189
msgid "Dupe limit must 1 or more seconds."
@@ -3815,7 +3815,7 @@ msgstr "Limite de texto"
#: actions/siteadminpanel.php:318
msgid "Maximum number of characters for notices."
-msgstr "Numero maxime de characteres pro notas."
+msgstr "Numero maximal de characteres pro notas."
#: actions/siteadminpanel.php:322
msgid "Dupe limit"
@@ -4348,10 +4348,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
+"Iste sito es realisate per %1$s version %2$s, copyright 2008-2010 StatusNet, "
+"Inc. e contributores."
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "Contributores"
#: actions/version.php:168
msgid ""
@@ -4360,6 +4362,10 @@ msgid ""
"Software Foundation, either version 3 of the License, or (at your option) "
"any later version. "
msgstr ""
+"StatusNet es software libere: vos pote redistribuer lo e/o modificar lo sub "
+"le conditiones del GNU Affero General Public License como publicate per le "
+"Free Software Foundation, o version 3 de iste licentia, o (a vostre "
+"election) omne version plus recente. "
#: actions/version.php:174
msgid ""
@@ -4368,6 +4374,10 @@ msgid ""
"FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License "
"for more details. "
msgstr ""
+"Iste programma es distribuite in le sperantia que illo essera utile, ma SIN "
+"ALCUN GARANTIA; sin mesmo le garantia implicite de COMMERCIABILITATE o de "
+"USABILITATE PRO UN PARTICULAR SCOPO. Vide le GNU Affero General Public "
+"License pro ulterior detalios. "
#: actions/version.php:180
#, php-format
@@ -4375,19 +4385,20 @@ msgid ""
"You should have received a copy of the GNU Affero General Public License "
"along with this program. If not, see %s."
msgstr ""
+"Un copia del GNU Affero General Public License deberea esser disponibile "
+"insimul con iste programma. Si non, vide %s."
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "Plug-ins"
#: actions/version.php:196 lib/action.php:747
-#, fuzzy
msgid "Version"
-msgstr "Conversation"
+msgstr "Version"
#: actions/version.php:197
msgid "Author(s)"
-msgstr ""
+msgstr "Autor(es)"
#: classes/File.php:144
#, php-format
@@ -4395,31 +4406,30 @@ msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
+"Nulle file pote esser plus grande que %d bytes e le file que tu inviava ha %"
+"d bytes. Tenta incargar un version minus grande."
#: classes/File.php:154
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
-msgstr ""
+msgstr "Un file de iste dimension excederea tu quota de usator de %d bytes."
#: classes/File.php:161
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
-msgstr ""
+msgstr "Un file de iste dimension excederea tu quota mensual de %d bytes."
#: classes/Group_member.php:41
-#, fuzzy
msgid "Group join failed."
-msgstr "Profilo del gruppo"
+msgstr "Le inscription al gruppo ha fallite."
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Non poteva actualisar gruppo."
+msgstr "Non es membro del gruppo."
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Profilo del gruppo"
+msgstr "Le cancellation del membrato del gruppo ha fallite."
#: classes/Login_token.php:76
#, php-format
@@ -4428,228 +4438,232 @@ msgstr "Non poteva crear indicio de identification pro %s"
#: classes/Message.php:45
msgid "You are banned from sending direct messages."
-msgstr ""
+msgstr "Il te es prohibite inviar messages directe."
#: classes/Message.php:61
msgid "Could not insert message."
-msgstr ""
+msgstr "Non poteva inserer message."
#: classes/Message.php:71
msgid "Could not update message with new URI."
-msgstr ""
+msgstr "Non poteva actualisar message con nove URI."
#: classes/Notice.php:157
#, php-format
msgid "DB error inserting hashtag: %s"
-msgstr ""
+msgstr "Error in base de datos durante insertion del marca (hashtag): %s"
#: classes/Notice.php:214
msgid "Problem saving notice. Too long."
-msgstr ""
+msgstr "Problema salveguardar nota. Troppo longe."
#: classes/Notice.php:218
msgid "Problem saving notice. Unknown user."
-msgstr ""
+msgstr "Problema salveguardar nota. Usator incognite."
#: classes/Notice.php:223
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
+"Troppo de notas troppo rapidemente; face un pausa e publica de novo post "
+"alcun minutas."
#: classes/Notice.php:229
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
+"Troppo de messages duplicate troppo rapidemente; face un pausa e publica de "
+"novo post alcun minutas."
#: classes/Notice.php:235
msgid "You are banned from posting notices on this site."
-msgstr ""
+msgstr "Il te es prohibite publicar notas in iste sito."
#: classes/Notice.php:294 classes/Notice.php:319
msgid "Problem saving notice."
-msgstr ""
+msgstr "Problema salveguardar nota."
#: classes/Notice.php:788
msgid "Problem saving group inbox."
-msgstr ""
+msgstr "Problema salveguardar le cassa de entrata del gruppo."
#: classes/Notice.php:848
#, php-format
msgid "DB error inserting reply: %s"
-msgstr ""
+msgstr "Error del base de datos durante le insertion del responsa: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
-msgstr ""
+msgstr "RT @%1$s %2$s"
#: classes/User.php:385
#, php-format
msgid "Welcome to %1$s, @%2$s!"
-msgstr ""
+msgstr "Benvenite a %1$s, @%2$s!"
#: classes/User_group.php:380
msgid "Could not create group."
-msgstr ""
+msgstr "Non poteva crear gruppo."
#: classes/User_group.php:409
msgid "Could not set group membership."
-msgstr ""
+msgstr "Non poteva configurar le membrato del gruppo."
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
-msgstr ""
+msgstr "Cambiar le optiones de tu profilo"
#: lib/accountsettingsaction.php:112
msgid "Upload an avatar"
-msgstr ""
+msgstr "Incargar un avatar"
#: lib/accountsettingsaction.php:116
msgid "Change your password"
-msgstr ""
+msgstr "Cambiar tu contrasigno"
#: lib/accountsettingsaction.php:120
msgid "Change email handling"
-msgstr ""
+msgstr "Modificar le tractamento de e-mail"
#: lib/accountsettingsaction.php:124
msgid "Design your profile"
-msgstr ""
+msgstr "Designar tu profilo"
#: lib/accountsettingsaction.php:128
msgid "Other"
-msgstr ""
+msgstr "Altere"
#: lib/accountsettingsaction.php:128
msgid "Other options"
-msgstr ""
+msgstr "Altere optiones"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%s quitava le gruppo %s"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
-msgstr ""
+msgstr "Pagina sin titulo"
#: lib/action.php:433
msgid "Primary site navigation"
-msgstr ""
+msgstr "Navigation primari del sito"
#: lib/action.php:439
msgid "Home"
-msgstr ""
+msgstr "Initio"
#: lib/action.php:439
msgid "Personal profile and friends timeline"
-msgstr ""
+msgstr "Profilo personal e chronologia de amicos"
#: lib/action.php:441
msgid "Change your email, avatar, password, profile"
-msgstr ""
+msgstr "Cambiar tu e-mail, avatar, contrasigno, profilo"
#: lib/action.php:444
msgid "Connect"
-msgstr ""
+msgstr "Connecter"
#: lib/action.php:444
msgid "Connect to services"
-msgstr ""
+msgstr "Connecter con servicios"
#: lib/action.php:448
msgid "Change site configuration"
-msgstr ""
+msgstr "Modificar le configuration del sito"
#: lib/action.php:452 lib/subgroupnav.php:105
msgid "Invite"
-msgstr ""
+msgstr "Invitar"
#: lib/action.php:453 lib/subgroupnav.php:106
#, php-format
msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
+msgstr "Invitar amicos e collegas a accompaniar te in %s"
#: lib/action.php:458
msgid "Logout"
-msgstr ""
+msgstr "Clauder session"
#: lib/action.php:458
msgid "Logout from the site"
-msgstr ""
+msgstr "Terminar le session del sito"
#: lib/action.php:463
msgid "Create an account"
-msgstr ""
+msgstr "Crear un conto"
#: lib/action.php:466
msgid "Login to the site"
-msgstr ""
+msgstr "Identificar te a iste sito"
#: lib/action.php:469 lib/action.php:732
msgid "Help"
-msgstr ""
+msgstr "Adjuta"
#: lib/action.php:469
msgid "Help me!"
-msgstr ""
+msgstr "Adjuta me!"
#: lib/action.php:472 lib/searchaction.php:127
msgid "Search"
-msgstr ""
+msgstr "Cercar"
#: lib/action.php:472
msgid "Search for people or text"
-msgstr ""
+msgstr "Cercar personas o texto"
#: lib/action.php:493
msgid "Site notice"
-msgstr ""
+msgstr "Aviso del sito"
#: lib/action.php:559
msgid "Local views"
-msgstr ""
+msgstr "Vistas local"
#: lib/action.php:625
msgid "Page notice"
-msgstr ""
+msgstr "Aviso de pagina"
#: lib/action.php:727
msgid "Secondary site navigation"
-msgstr ""
+msgstr "Navigation secundari del sito"
#: lib/action.php:734
msgid "About"
-msgstr ""
+msgstr "A proposito"
#: lib/action.php:736
msgid "FAQ"
-msgstr ""
+msgstr "FAQ"
#: lib/action.php:740
msgid "TOS"
-msgstr ""
+msgstr "CdS"
#: lib/action.php:743
msgid "Privacy"
-msgstr ""
+msgstr "Confidentialitate"
#: lib/action.php:745
msgid "Source"
-msgstr ""
+msgstr "Fonte"
#: lib/action.php:749
msgid "Contact"
-msgstr ""
+msgstr "Contacto"
#: lib/action.php:751
msgid "Badge"
-msgstr ""
+msgstr "Insignia"
#: lib/action.php:779
msgid "StatusNet software license"
-msgstr ""
+msgstr "Licentia del software StatusNet"
#: lib/action.php:782
#, php-format
@@ -4657,11 +4671,13 @@ msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
+"**%%site.name%%** es un servicio de microblog offerite per [%%site.broughtby%"
+"%](%%site.broughtbyurl%%). "
#: lib/action.php:784
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
-msgstr ""
+msgstr "**%%site.name%%** es un servicio de microblog. "
#: lib/action.php:786
#, php-format
@@ -4670,227 +4686,230 @@ msgid ""
"s, available under the [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
+"Le sito functiona con le software de microblog [StatusNet](http://status."
+"net/), version %s, disponibile sub le [GNU Affero General Public License]"
+"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:801
msgid "Site content license"
-msgstr ""
+msgstr "Licentia del contento del sito"
#: lib/action.php:806
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Le contento e datos de %1$s es private e confidential."
#: lib/action.php:811
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
-msgstr ""
+msgstr "Contento e datos sub copyright de %1$s. Tote le derectos reservate."
#: lib/action.php:814
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
+"Contento e datos sub copyright del contributores. Tote le derectos reservate."
#: lib/action.php:826
msgid "All "
-msgstr ""
+msgstr "Totes "
#: lib/action.php:831
msgid "license."
-msgstr ""
+msgstr "licentia."
#: lib/action.php:1130
msgid "Pagination"
-msgstr ""
+msgstr "Pagination"
#: lib/action.php:1139
msgid "After"
-msgstr ""
+msgstr "Post"
#: lib/action.php:1147
msgid "Before"
-msgstr ""
+msgstr "Ante"
#: lib/adminpanelaction.php:96
msgid "You cannot make changes to this site."
-msgstr ""
+msgstr "Tu non pote facer modificationes in iste sito."
#: lib/adminpanelaction.php:107
-#, fuzzy
msgid "Changes to that panel are not allowed."
-msgstr "Registration non permittite."
+msgstr "Le modification de iste pannello non es permittite."
#: lib/adminpanelaction.php:206
msgid "showForm() not implemented."
-msgstr ""
+msgstr "showForm() non implementate."
#: lib/adminpanelaction.php:235
msgid "saveSettings() not implemented."
-msgstr ""
+msgstr "saveSettings() non implementate."
#: lib/adminpanelaction.php:258
msgid "Unable to delete design setting."
-msgstr ""
+msgstr "Impossibile deler configuration de apparentia."
#: lib/adminpanelaction.php:312
msgid "Basic site configuration"
-msgstr ""
+msgstr "Configuration basic del sito"
#: lib/adminpanelaction.php:317
msgid "Design configuration"
-msgstr ""
+msgstr "Configuration del apparentia"
#: lib/adminpanelaction.php:322
-#, fuzzy
msgid "User configuration"
-msgstr "Nulle codice de confirmation."
+msgstr "Configuration del usator"
#: lib/adminpanelaction.php:327
msgid "Access configuration"
-msgstr ""
+msgstr "Configuration del accesso"
#: lib/adminpanelaction.php:332
msgid "Paths configuration"
-msgstr ""
+msgstr "Configuration del camminos"
#: lib/adminpanelaction.php:337
-#, fuzzy
msgid "Sessions configuration"
-msgstr "Nulle codice de confirmation."
+msgstr "Configuration del sessiones"
#: lib/apiauth.php:95
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
+"Le ressource de API require accesso pro lectura e scriptura, ma tu ha "
+"solmente accesso pro lectura."
#: lib/apiauth.php:273
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
+"Tentativa de authentication al API fallite, pseudonymo = %1$s, proxy = %2$s, "
+"IP = %3$s"
#: lib/applicationeditform.php:136
msgid "Edit application"
-msgstr ""
+msgstr "Modificar application"
#: lib/applicationeditform.php:184
msgid "Icon for this application"
-msgstr ""
+msgstr "Icone pro iste application"
#: lib/applicationeditform.php:204
-#, fuzzy, php-format
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Describe te e tu interesses in %d characteres"
+msgstr "Describe tu application in %d characteres"
#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr ""
+msgstr "Describe tu application"
#: lib/applicationeditform.php:216
-#, fuzzy
msgid "Source URL"
-msgstr "URL pro reporto"
+msgstr "URL de origine"
#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr ""
+msgstr "URL del pagina initial de iste application"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organisation responsabile de iste application"
#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
-msgstr ""
+msgstr "URL del pagina initial del organisation"
#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
-msgstr ""
+msgstr "URL verso le qual rediriger post authentication"
#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Navigator"
#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Scriptorio"
#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Typo de application, navigator o scriptorio"
#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Lectura solmente"
#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Lectura e scriptura"
#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
+"Accesso predefinite pro iste application: lectura solmente, o lectura e "
+"scriptura"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Remover"
+msgstr "Revocar"
#: lib/attachmentlist.php:87
msgid "Attachments"
-msgstr ""
+msgstr "Annexos"
#: lib/attachmentlist.php:265
msgid "Author"
-msgstr ""
+msgstr "Autor"
#: lib/attachmentlist.php:278
msgid "Provider"
-msgstr ""
+msgstr "Providitor"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
-msgstr ""
+msgstr "Notas ubi iste annexo appare"
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
-msgstr ""
+msgstr "Etiquettas pro iste annexo"
#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
-#, fuzzy
msgid "Password changing failed"
-msgstr "Cambio del contrasigno"
+msgstr "Cambio del contrasigno fallite"
#: lib/authenticationplugin.php:233
-#, fuzzy
msgid "Password changing is not allowed"
-msgstr "Cambio del contrasigno"
+msgstr "Cambio del contrasigno non permittite"
#: lib/channel.php:138 lib/channel.php:158
msgid "Command results"
-msgstr ""
+msgstr "Resultatos del commando"
#: lib/channel.php:210 lib/mailhandler.php:142
msgid "Command complete"
-msgstr ""
+msgstr "Commando complete"
#: lib/channel.php:221
msgid "Command failed"
-msgstr ""
+msgstr "Commando fallite"
#: lib/command.php:44
msgid "Sorry, this command is not yet implemented."
-msgstr ""
+msgstr "Pardono, iste commando non es ancora implementate."
#: lib/command.php:88
-#, fuzzy, php-format
+#, php-format
msgid "Could not find a user with nickname %s"
-msgstr "Non poteva trovar le usator de destination."
+msgstr "Non poteva trovar un usator con pseudonymo %s"
#: lib/command.php:92
msgid "It does not make a lot of sense to nudge yourself!"
-msgstr ""
+msgstr "Non ha multe senso pulsar te mesme!"
#: lib/command.php:99
-#, fuzzy, php-format
+#, php-format
msgid "Nudge sent to %s"
-msgstr "Pulsata inviate"
+msgstr "Pulsata inviate a %s"
#: lib/command.php:126
#, php-format
@@ -4899,21 +4918,22 @@ msgid ""
"Subscribers: %2$s\n"
"Notices: %3$s"
msgstr ""
+"Subscriptiones: %1$s\n"
+"Subscriptores: %2$s\n"
+"Notas: %3$s"
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
msgid "Notice with that id does not exist"
-msgstr "Nulle usator existe con iste adresse de e-mail o nomine de usator."
+msgstr "Non existe un nota con iste ID"
#: lib/command.php:168 lib/command.php:406 lib/command.php:467
#: lib/command.php:523
-#, fuzzy
msgid "User has no last notice"
-msgstr "Le usator non ha un profilo."
+msgstr "Usator non ha ultime nota"
#: lib/command.php:190
msgid "Notice marked as fave."
-msgstr ""
+msgstr "Nota marcate como favorite."
#: lib/command.php:217
msgid "You are already a member of that group"
@@ -4940,29 +4960,29 @@ msgid "%s left group %s"
msgstr "%s quitava le gruppo %s"
#: lib/command.php:309
-#, fuzzy, php-format
+#, php-format
msgid "Fullname: %s"
-msgstr "Nomine complete"
+msgstr "Nomine complete: %s"
#: lib/command.php:312 lib/mail.php:254
#, php-format
msgid "Location: %s"
-msgstr ""
+msgstr "Loco: %s"
#: lib/command.php:315 lib/mail.php:256
#, php-format
msgid "Homepage: %s"
-msgstr ""
+msgstr "Pagina personal: %s"
#: lib/command.php:318
#, php-format
msgid "About: %s"
-msgstr ""
+msgstr "A proposito: %s"
#: lib/command.php:349
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Message troppo longe - maximo es %d characteres, tu inviava %d"
#: lib/command.php:367
#, php-format
@@ -4971,7 +4991,7 @@ msgstr "Message directe a %s inviate"
#: lib/command.php:369
msgid "Error sending direct message."
-msgstr ""
+msgstr "Error durante le invio del message directe."
#: lib/command.php:413
msgid "Cannot repeat your own notice"
@@ -4982,9 +5002,9 @@ msgid "Already repeated that notice"
msgstr "Iste nota ha ja essite repetite"
#: lib/command.php:426
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Nota delite."
+msgstr "Nota de %s repetite"
#: lib/command.php:428
msgid "Error repeating notice."
@@ -4993,93 +5013,95 @@ msgstr "Error durante le repetition del nota."
#: lib/command.php:482
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Nota troppo longe - maximo es %d characteres, tu inviava %d"
#: lib/command.php:491
-#, fuzzy, php-format
+#, php-format
msgid "Reply to %s sent"
-msgstr "Responsas a %s"
+msgstr "Responsa a %s inviate"
#: lib/command.php:493
msgid "Error saving notice."
-msgstr ""
+msgstr "Errur durante le salveguarda del nota."
#: lib/command.php:547
msgid "Specify the name of the user to subscribe to"
-msgstr ""
+msgstr "Specifica le nomine del usator al qual subscriber te"
#: lib/command.php:554
#, php-format
msgid "Subscribed to %s"
-msgstr ""
+msgstr "Subscribite a %s"
#: lib/command.php:575
msgid "Specify the name of the user to unsubscribe from"
-msgstr ""
+msgstr "Specifica le nomine del usator al qual cancellar le subscription"
#: lib/command.php:582
#, php-format
msgid "Unsubscribed from %s"
-msgstr ""
+msgstr "Subscription a %s cancellate"
#: lib/command.php:600 lib/command.php:623
msgid "Command not yet implemented."
-msgstr ""
+msgstr "Commando non ancora implementate."
#: lib/command.php:603
msgid "Notification off."
-msgstr ""
+msgstr "Notification disactivate."
#: lib/command.php:605
msgid "Can't turn off notification."
-msgstr ""
+msgstr "Non pote disactivar notification."
#: lib/command.php:626
msgid "Notification on."
-msgstr ""
+msgstr "Notification activate."
#: lib/command.php:628
msgid "Can't turn on notification."
-msgstr ""
+msgstr "Non pote activar notification."
#: lib/command.php:641
msgid "Login command is disabled"
-msgstr ""
+msgstr "Le commando de apertura de session es disactivate"
#: lib/command.php:652
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
+"Iste ligamine pote esser usate solmente un vice, e es valide durante "
+"solmente 2 minutas: %s"
#: lib/command.php:668
msgid "You are not subscribed to anyone."
-msgstr ""
+msgstr "Tu non es subscribite a alcuno."
#: lib/command.php:670
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tu es subscribite a iste persona:"
+msgstr[1] "Tu es subscribite a iste personas:"
#: lib/command.php:690
msgid "No one is subscribed to you."
-msgstr ""
+msgstr "Necuno es subscribite a te."
#: lib/command.php:692
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Iste persona es subscribite a te:"
+msgstr[1] "Iste personas es subscribite a te:"
#: lib/command.php:712
msgid "You are not a member of any groups."
-msgstr ""
+msgstr "Tu non es membro de alcun gruppo."
#: lib/command.php:714
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tu es membro de iste gruppo:"
+msgstr[1] "Tu es membro de iste gruppos:"
#: lib/command.php:728
msgid ""
@@ -5121,255 +5143,295 @@ msgid ""
"tracks - not yet implemented.\n"
"tracking - not yet implemented.\n"
msgstr ""
+"Commandos:\n"
+"on - activar notificationes\n"
+"off - disactivar notificationes\n"
+"help - monstrar iste adjuta\n"
+"follow <pseudonymo> - subscriber te al usator\n"
+"groups - listar le gruppos del quales tu es membro\n"
+"subscriptions - listar le personas que tu seque\n"
+"subscribers - listar le personas qui te seque\n"
+"leave <pseudonymo> - cancellar subscription al usator\n"
+"d <pseudonymo> <texto> - diriger message al usator\n"
+"get <pseudonymo> - obtener ultime nota del usator\n"
+"whois <pseudonymo> - obtener info de profilo del usator\n"
+"fav <pseudonymo> - adder ultime nota del usator como favorite\n"
+"fav #<id_de_nota> - adder nota con le ID date como favorite\n"
+"repeat #<id_de_nota> - repeter le nota con le ID date\n"
+"repeat <pseudonymo> - repeter le ultime nota del usator\n"
+"reply #<id_de_nota> - responder al nota con le ID date\n"
+"reply <pseudonymo> - responder al ultime nota del usator\n"
+"join <gruppo> - facer te membro del gruppo\n"
+"login - obtener ligamine pro aperir session al interfacie web\n"
+"drop <gruppo> - quitar gruppo\n"
+"stats - obtener tu statisticas\n"
+"stop - como 'off'\n"
+"quit - como 'off'\n"
+"sub <pseudonymo> - como 'follow'\n"
+"unsub <pseudonymo> - como 'leave'\n"
+"last <pseudonymo> - como 'get'\n"
+"on <pseudonymo> - non ancora implementate.\n"
+"off <pseudonymo> - non ancora implementate.\n"
+"nudge <pseudonymo> - rememorar un usator de scriber alique.\n"
+"invite <numero de telephono> - non ancora implementate.\n"
+"track <parola> - non ancora implementate.\n"
+"untrack <parola> - non ancora implementate.\n"
+"track off - non ancora implementate.\n"
+"untrack all - non ancora implementate.\n"
+"tracks - non ancora implementate.\n"
+"tracking - non ancora implementate.\n"
#: lib/common.php:135
msgid "No configuration file found. "
-msgstr ""
+msgstr "Nulle file de configuration trovate. "
#: lib/common.php:136
msgid "I looked for configuration files in the following places: "
-msgstr ""
+msgstr "Io cercava files de configuration in le sequente locos: "
#: lib/common.php:138
msgid "You may wish to run the installer to fix this."
-msgstr ""
+msgstr "Considera executar le installator pro reparar isto."
#: lib/common.php:139
msgid "Go to the installer."
-msgstr ""
+msgstr "Ir al installator."
#: lib/connectsettingsaction.php:110
msgid "IM"
-msgstr ""
+msgstr "MI"
#: lib/connectsettingsaction.php:111
msgid "Updates by instant messenger (IM)"
-msgstr ""
+msgstr "Actualisationes per messageria instantanee (MI)"
#: lib/connectsettingsaction.php:116
msgid "Updates by SMS"
-msgstr ""
+msgstr "Actualisationes per SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Conversation"
+msgstr "Connexiones"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Applicationes autorisate connectite"
#: lib/dberroraction.php:60
msgid "Database error"
-msgstr ""
+msgstr "Error de base de datos"
#: lib/designsettings.php:105
msgid "Upload file"
-msgstr ""
+msgstr "Incargar file"
#: lib/designsettings.php:109
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
+"Tu pote actualisar tu imagine de fundo personal. Le dimension maximal del "
+"file es 2MB."
#: lib/designsettings.php:418
msgid "Design defaults restored."
-msgstr ""
+msgstr "Apparentia predefinite restaurate."
#: lib/disfavorform.php:114 lib/disfavorform.php:140
msgid "Disfavor this notice"
-msgstr ""
+msgstr "Disfavorir iste nota"
#: lib/favorform.php:114 lib/favorform.php:140
msgid "Favor this notice"
-msgstr ""
+msgstr "Favorir iste nota"
#: lib/favorform.php:140
msgid "Favor"
-msgstr ""
+msgstr "Favorir"
#: lib/feed.php:85
msgid "RSS 1.0"
-msgstr ""
+msgstr "RSS 1.0"
#: lib/feed.php:87
msgid "RSS 2.0"
-msgstr ""
+msgstr "RSS 2.0"
#: lib/feed.php:89
msgid "Atom"
-msgstr ""
+msgstr "Atom"
#: lib/feed.php:91
msgid "FOAF"
-msgstr ""
+msgstr "Amico de un amico"
#: lib/feedlist.php:64
msgid "Export data"
-msgstr ""
+msgstr "Exportar datos"
#: lib/galleryaction.php:121
msgid "Filter tags"
-msgstr ""
+msgstr "Filtrar etiquettas"
#: lib/galleryaction.php:131
msgid "All"
-msgstr ""
+msgstr "Totes"
#: lib/galleryaction.php:139
msgid "Select tag to filter"
-msgstr ""
+msgstr "Selige etiquetta a filtrar"
#: lib/galleryaction.php:140
msgid "Tag"
-msgstr ""
+msgstr "Etiquetta"
#: lib/galleryaction.php:141
msgid "Choose a tag to narrow list"
-msgstr ""
+msgstr "Selige etiquetta pro reducer lista"
#: lib/galleryaction.php:143
msgid "Go"
-msgstr ""
+msgstr "Ir"
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
-msgstr ""
+msgstr "URL del pagina initial o blog del gruppo o topico"
#: lib/groupeditform.php:168
msgid "Describe the group or topic"
-msgstr ""
+msgstr "Describe le gruppo o topico"
#: lib/groupeditform.php:170
#, php-format
msgid "Describe the group or topic in %d characters"
-msgstr ""
+msgstr "Describe le gruppo o topico in %d characteres"
#: lib/groupeditform.php:179
msgid ""
"Location for the group, if any, like \"City, State (or Region), Country\""
msgstr ""
+"Loco del gruppo, si existe, como \"Citate, Provincia (o Region), Pais\""
#: lib/groupeditform.php:187
#, php-format
msgid "Extra nicknames for the group, comma- or space- separated, max %d"
msgstr ""
+"Pseudonymos additional pro le gruppo, separate per commas o spatios, max %d"
#: lib/groupnav.php:85
msgid "Group"
-msgstr ""
+msgstr "Gruppo"
#: lib/groupnav.php:101
msgid "Blocked"
-msgstr ""
+msgstr "Blocate"
#: lib/groupnav.php:102
#, php-format
msgid "%s blocked users"
-msgstr ""
+msgstr "%s usatores blocate"
#: lib/groupnav.php:108
#, php-format
msgid "Edit %s group properties"
-msgstr ""
+msgstr "Modificar proprietates del gruppo %s"
#: lib/groupnav.php:113
msgid "Logo"
-msgstr ""
+msgstr "Logotypo"
#: lib/groupnav.php:114
#, php-format
msgid "Add or edit %s logo"
-msgstr ""
+msgstr "Adder o modificar logotypo de %s"
#: lib/groupnav.php:120
#, php-format
msgid "Add or edit %s design"
-msgstr ""
+msgstr "Adder o modificar apparentia de %s"
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
-msgstr ""
+msgstr "Gruppos con le plus membros"
#: lib/groupsbypostssection.php:71
msgid "Groups with most posts"
-msgstr ""
+msgstr "Gruppos con le plus messages"
#: lib/grouptagcloudsection.php:56
#, php-format
msgid "Tags in %s group's notices"
-msgstr ""
+msgstr "Etiquettas in le notas del gruppo %s"
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
-msgstr ""
+msgstr "Iste pagina non es disponibile in un formato que tu accepta"
#: lib/imagefile.php:75
#, php-format
msgid "That file is too big. The maximum file size is %s."
-msgstr ""
+msgstr "Iste file es troppo grande. Le dimension maximal es %s."
#: lib/imagefile.php:80
msgid "Partial upload."
-msgstr ""
+msgstr "Incargamento partial."
#: lib/imagefile.php:88 lib/mediafile.php:170
msgid "System error uploading file."
-msgstr ""
+msgstr "Error de systema durante le incargamento del file."
#: lib/imagefile.php:96
msgid "Not an image or corrupt file."
-msgstr ""
+msgstr "Le file non es un imagine o es defecte."
#: lib/imagefile.php:105
msgid "Unsupported image file format."
-msgstr ""
+msgstr "Formato de file de imagine non supportate."
#: lib/imagefile.php:118
msgid "Lost our file."
-msgstr ""
+msgstr "File perdite."
#: lib/imagefile.php:150 lib/imagefile.php:197
msgid "Unknown file type"
-msgstr ""
+msgstr "Typo de file incognite"
#: lib/imagefile.php:217
msgid "MB"
-msgstr ""
+msgstr "MB"
#: lib/imagefile.php:219
msgid "kB"
-msgstr ""
+msgstr "KB"
#: lib/jabber.php:220
#, php-format
msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
#: lib/jabber.php:400
-#, fuzzy, php-format
+#, php-format
msgid "Unknown inbox source %d."
-msgstr "Lingua \"%s\" incognite"
+msgstr "Fonte de cassa de entrata \"%s\" incognite"
#: lib/joinform.php:114
msgid "Join"
-msgstr ""
+msgstr "Inscriber"
#: lib/leaveform.php:114
msgid "Leave"
-msgstr ""
+msgstr "Quitar"
#: lib/logingroupnav.php:80
msgid "Login with a username and password"
-msgstr ""
+msgstr "Aperir session con nomine de usator e contrasigno"
#: lib/logingroupnav.php:86
msgid "Sign up for a new account"
-msgstr ""
+msgstr "Crear un nove conto"
#: lib/mail.php:172
msgid "Email address confirmation"
-msgstr ""
+msgstr "Confirmation del adresse de e-mail"
#: lib/mail.php:174
#, php-format
@@ -5387,11 +5449,23 @@ msgid ""
"Thanks for your time, \n"
"%s\n"
msgstr ""
+"Salute %s,\n"
+"\n"
+"Alcuno entrava ante un momento iste adresse de e-mail in %s.\n"
+"\n"
+"Si isto esseva tu, e tu vole confirmar le adresse, usa le URL hic infra:\n"
+"\n"
+"%s\n"
+"\n"
+"Si non, simplemente ignora iste message.\n"
+"\n"
+"Gratias pro tu attention,\n"
+"%s\n"
#: lib/mail.php:236
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
-msgstr ""
+msgstr "%1$s seque ora tu notas in %2$s."
#: lib/mail.php:241
#, php-format
@@ -5407,16 +5481,26 @@ msgid ""
"----\n"
"Change your email address or notification options at %8$s\n"
msgstr ""
+"%1$s seque ora tu notas in %2$s.\n"
+"\n"
+"%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Cordialmente,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Cambia tu adresse de e-mail o optiones de notification a %8$s\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid "Bio: %s"
-msgstr "Bio"
+msgstr "Bio: %s"
#: lib/mail.php:286
#, php-format
msgid "New email address for posting to %s"
-msgstr ""
+msgstr "Nove adresse de e-mail pro publicar in %s"
#: lib/mail.php:289
#, php-format
@@ -5430,20 +5514,28 @@ msgid ""
"Faithfully yours,\n"
"%4$s"
msgstr ""
+"Tu ha un nove adresse pro publication in %1$s.\n"
+"\n"
+"Invia e-mail a %2$s pro publicar nove messages.\n"
+"\n"
+"Ulterior informationes se trova a %3$s.\n"
+"\n"
+"Cordialmente,\n"
+"%4$s"
#: lib/mail.php:413
#, php-format
msgid "%s status"
-msgstr ""
+msgstr "Stato de %s"
#: lib/mail.php:439
msgid "SMS confirmation"
-msgstr ""
+msgstr "Confirmation SMS"
#: lib/mail.php:463
#, php-format
msgid "You've been nudged by %s"
-msgstr ""
+msgstr "%s te ha pulsate"
#: lib/mail.php:467
#, php-format
@@ -5460,11 +5552,22 @@ msgid ""
"With kind regards,\n"
"%4$s\n"
msgstr ""
+"%1$s (%2$s) se demanda lo que tu face iste dies e te invita a scriber alique "
+"de nove.\n"
+"\n"
+"Dunque face audir de te :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Non responde a iste message; le responsa non arrivara.\n"
+"\n"
+"Con salutes cordial,\n"
+"%4$s\n"
#: lib/mail.php:510
#, php-format
msgid "New private message from %s"
-msgstr ""
+msgstr "Nove message private de %s"
#: lib/mail.php:514
#, php-format
@@ -5484,11 +5587,25 @@ msgid ""
"With kind regards,\n"
"%5$s\n"
msgstr ""
+"%1$s (%2$s) te ha inviate un message private:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"Tu pote responder a su message hic:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Non responde per e-mail; le responsa non arrivara.\n"
+"\n"
+"Con salutes cordial,\n"
+"%5$s\n"
#: lib/mail.php:559
#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr ""
+msgstr "%s (@%s) ha addite tu nota como favorite"
#: lib/mail.php:561
#, php-format
@@ -5510,11 +5627,28 @@ msgid ""
"Faithfully yours,\n"
"%6$s\n"
msgstr ""
+"%1$s (@%7$s) addeva ante un momento tu nota de %2$s como un de su "
+"favorites.\n"
+"\n"
+"Le URL de tu nota es:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Le texto de tu nota es:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Tu pote vider le lista del favorites de %1$s hic:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Cordialmente,\n"
+"%6$s\n"
#: lib/mail.php:624
#, php-format
msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
+msgstr "%s (@%s) ha inviate un nota a tu attention"
#: lib/mail.php:626
#, php-format
@@ -5530,168 +5664,185 @@ msgid ""
"\t%4$s\n"
"\n"
msgstr ""
+"%1$s (@%9$s) inviava ante un momento un nota a tu attention (un 'responsa "
+"@') in %2$s.\n"
+"\n"
+"Le nota es hic:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Le texto:\n"
+"\n"
+"%4$s\n"
+"\n"
#: lib/mailbox.php:89
msgid "Only the user can read their own mailboxes."
-msgstr ""
+msgstr "Solmente le usator pote leger su proprie cassas postal."
#: lib/mailbox.php:139
msgid ""
"You have no private messages. You can send private message to engage other "
"users in conversation. People can send you messages for your eyes only."
msgstr ""
+"Tu non ha messages private. Tu pote inviar messages private pro ingagiar "
+"altere usatores in conversation. Altere personas pote inviar te messages que "
+"solmente tu pote leger."
#: lib/mailbox.php:227 lib/noticelist.php:477
msgid "from"
-msgstr ""
+msgstr "de"
#: lib/mailhandler.php:37
msgid "Could not parse message."
-msgstr ""
+msgstr "Non comprendeva le syntaxe del message."
#: lib/mailhandler.php:42
msgid "Not a registered user."
-msgstr ""
+msgstr "Non un usator registrate."
#: lib/mailhandler.php:46
msgid "Sorry, that is not your incoming email address."
-msgstr ""
+msgstr "Pardono, isto non es tu adresse de e-mail entrante."
#: lib/mailhandler.php:50
msgid "Sorry, no incoming email allowed."
-msgstr ""
+msgstr "Pardono, le reception de e-mail non es permittite."
#: lib/mailhandler.php:228
-#, fuzzy, php-format
+#, php-format
msgid "Unsupported message type: %s"
-msgstr "Formato non supportate."
+msgstr "Typo de message non supportate: %s"
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
msgstr ""
+"Un error de base de datos occurreva durante le salveguarda de tu file. Per "
+"favor reproba."
#: lib/mediafile.php:142
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
-msgstr ""
+msgstr "Le file incargate excede le directiva upload_max_filesize in php.ini."
#: lib/mediafile.php:147
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form."
msgstr ""
+"Le file incargate excede le directiva MAX_FILE_SIZE specificate in le "
+"formulario HTML."
#: lib/mediafile.php:152
msgid "The uploaded file was only partially uploaded."
-msgstr ""
+msgstr "Le file incargate ha solmente essite incargate partialmente."
#: lib/mediafile.php:159
msgid "Missing a temporary folder."
-msgstr ""
+msgstr "Manca un dossier temporari."
#: lib/mediafile.php:162
msgid "Failed to write file to disk."
-msgstr ""
+msgstr "Falleva de scriber le file in disco."
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
-msgstr ""
+msgstr "Incargamento de file stoppate per un extension."
#: lib/mediafile.php:179 lib/mediafile.php:216
msgid "File exceeds user's quota."
-msgstr ""
+msgstr "File excede quota del usator."
#: lib/mediafile.php:196 lib/mediafile.php:233
msgid "File could not be moved to destination directory."
-msgstr ""
+msgstr "File non poteva esser displaciate in le directorio de destination."
#: lib/mediafile.php:201 lib/mediafile.php:237
-#, fuzzy
msgid "Could not determine file's MIME type."
-msgstr "Non poteva determinar le usator de origine."
+msgstr "Non poteva determinar le typo MIME del file."
#: lib/mediafile.php:270
#, php-format
msgid " Try using another %s format."
-msgstr ""
+msgstr " Tenta usar un altere formato %s."
#: lib/mediafile.php:275
#, php-format
msgid "%s is not a supported file type on this server."
-msgstr ""
+msgstr "%s non es un typo de file supportate in iste servitor."
#: lib/messageform.php:120
msgid "Send a direct notice"
-msgstr ""
+msgstr "Inviar un nota directe"
#: lib/messageform.php:146
msgid "To"
-msgstr ""
+msgstr "A"
#: lib/messageform.php:159 lib/noticeform.php:185
msgid "Available characters"
-msgstr ""
+msgstr "Characteres disponibile"
#: lib/noticeform.php:160
msgid "Send a notice"
-msgstr ""
+msgstr "Inviar un nota"
#: lib/noticeform.php:173
#, php-format
msgid "What's up, %s?"
-msgstr ""
+msgstr "Como sta, %s?"
#: lib/noticeform.php:192
msgid "Attach"
-msgstr ""
+msgstr "Annexar"
#: lib/noticeform.php:196
msgid "Attach a file"
-msgstr ""
+msgstr "Annexar un file"
#: lib/noticeform.php:212
-#, fuzzy
msgid "Share my location"
-msgstr "Non poteva salveguardar le preferentias de loco."
+msgstr "Divulgar mi loco"
#: lib/noticeform.php:215
-#, fuzzy
msgid "Do not share my location"
-msgstr "Non poteva salveguardar le preferentias de loco."
+msgstr "Non divulgar mi loco"
#: lib/noticeform.php:216
msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
+"Pardono, le obtention de tu geolocalisation prende plus tempore que "
+"previste. Per favor reproba plus tarde."
#: lib/noticelist.php:428
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-msgstr ""
+msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:429
msgid "N"
-msgstr ""
+msgstr "N"
#: lib/noticelist.php:429
msgid "S"
-msgstr ""
+msgstr "S"
#: lib/noticelist.php:430
msgid "E"
-msgstr ""
+msgstr "E"
#: lib/noticelist.php:430
msgid "W"
-msgstr ""
+msgstr "W"
#: lib/noticelist.php:436
msgid "at"
-msgstr ""
+msgstr "a"
#: lib/noticelist.php:547
msgid "in context"
-msgstr ""
+msgstr "in contexto"
#: lib/noticelist.php:572
msgid "Repeated by"
@@ -5699,151 +5850,148 @@ msgstr "Repetite per"
#: lib/noticelist.php:598
msgid "Reply to this notice"
-msgstr ""
+msgstr "Responder a iste nota"
#: lib/noticelist.php:599
msgid "Reply"
-msgstr ""
+msgstr "Responder"
#: lib/noticelist.php:641
-#, fuzzy
msgid "Notice repeated"
-msgstr "Nota delite."
+msgstr "Nota repetite"
#: lib/nudgeform.php:116
msgid "Nudge this user"
-msgstr ""
+msgstr "Pulsar iste usator"
#: lib/nudgeform.php:128
msgid "Nudge"
-msgstr ""
+msgstr "Pulsar"
#: lib/nudgeform.php:128
msgid "Send a nudge to this user"
-msgstr ""
+msgstr "Inviar un pulsata a iste usator"
#: lib/oauthstore.php:283
msgid "Error inserting new profile"
-msgstr ""
+msgstr "Error durante le insertion del nove profilo"
#: lib/oauthstore.php:291
msgid "Error inserting avatar"
-msgstr ""
+msgstr "Error durante le insertion del avatar"
#: lib/oauthstore.php:311
msgid "Error inserting remote profile"
-msgstr ""
+msgstr "Error durante le insertion del profilo remote"
#: lib/oauthstore.php:345
msgid "Duplicate notice"
-msgstr ""
+msgstr "Duplicar nota"
#: lib/oauthstore.php:465 lib/subs.php:48
msgid "You have been banned from subscribing."
-msgstr ""
+msgstr "Tu ha essite blocate del subscription."
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
-msgstr ""
+msgstr "Non poteva inserer nove subscription."
#: lib/personalgroupnav.php:99
msgid "Personal"
-msgstr ""
+msgstr "Personal"
#: lib/personalgroupnav.php:104
msgid "Replies"
-msgstr ""
+msgstr "Responsas"
#: lib/personalgroupnav.php:114
msgid "Favorites"
-msgstr ""
+msgstr "Favorites"
#: lib/personalgroupnav.php:125
msgid "Inbox"
-msgstr ""
+msgstr "Cassa de entrata"
#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
-msgstr ""
+msgstr "Tu messages recipite"
#: lib/personalgroupnav.php:130
msgid "Outbox"
-msgstr ""
+msgstr "Cassa de exito"
#: lib/personalgroupnav.php:131
msgid "Your sent messages"
-msgstr ""
+msgstr "Tu messages inviate"
#: lib/personaltagcloudsection.php:56
#, php-format
msgid "Tags in %s's notices"
-msgstr ""
+msgstr "Etiquettas in le notas de %s"
#: lib/plugin.php:114
-#, fuzzy
msgid "Unknown"
-msgstr "Action incognite"
+msgstr "Incognite"
#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
msgid "Subscriptions"
-msgstr ""
+msgstr "Subscriptiones"
#: lib/profileaction.php:126
msgid "All subscriptions"
-msgstr ""
+msgstr "Tote le subscriptiones"
#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
msgid "Subscribers"
-msgstr ""
+msgstr "Subscriptores"
#: lib/profileaction.php:157
msgid "All subscribers"
-msgstr ""
+msgstr "Tote le subscriptores"
#: lib/profileaction.php:178
msgid "User ID"
-msgstr ""
+msgstr "ID del usator"
#: lib/profileaction.php:183
msgid "Member since"
-msgstr ""
+msgstr "Membro depost"
#: lib/profileaction.php:245
msgid "All groups"
-msgstr ""
+msgstr "Tote le gruppos"
#: lib/profileformaction.php:123
msgid "No return-to arguments."
-msgstr ""
+msgstr "Nulle parametro return-to."
#: lib/profileformaction.php:137
msgid "Unimplemented method."
-msgstr ""
+msgstr "Methodo non implementate."
#: lib/publicgroupnav.php:78
msgid "Public"
-msgstr ""
+msgstr "Public"
#: lib/publicgroupnav.php:82
msgid "User groups"
-msgstr ""
+msgstr "Gruppos de usatores"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
msgid "Recent tags"
-msgstr ""
+msgstr "Etiquettas recente"
#: lib/publicgroupnav.php:88
msgid "Featured"
-msgstr ""
+msgstr "In evidentia"
#: lib/publicgroupnav.php:92
msgid "Popular"
-msgstr ""
+msgstr "Popular"
#: lib/repeatform.php:107
-#, fuzzy
msgid "Repeat this notice?"
-msgstr "Repeter iste nota"
+msgstr "Repeter iste nota?"
#: lib/repeatform.php:132
msgid "Repeat this notice"
@@ -5851,228 +5999,228 @@ msgstr "Repeter iste nota"
#: lib/router.php:665
msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Nulle signule usator definite pro le modo de singule usator."
#: lib/sandboxform.php:67
msgid "Sandbox"
-msgstr ""
+msgstr "Cassa de sablo"
#: lib/sandboxform.php:78
msgid "Sandbox this user"
-msgstr ""
+msgstr "Mitter iste usator in le cassa de sablo"
#: lib/searchaction.php:120
msgid "Search site"
-msgstr ""
+msgstr "Cercar in sito"
#: lib/searchaction.php:126
msgid "Keyword(s)"
-msgstr ""
+msgstr "Parola(s)-clave"
#: lib/searchaction.php:162
msgid "Search help"
-msgstr ""
+msgstr "Adjuta super le recerca"
#: lib/searchgroupnav.php:80
msgid "People"
-msgstr ""
+msgstr "Personas"
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
-msgstr ""
+msgstr "Cercar personas in iste sito"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
-msgstr ""
+msgstr "Cercar in contento de notas"
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
-msgstr ""
+msgstr "Cercar gruppos in iste sito"
#: lib/section.php:89
msgid "Untitled section"
-msgstr ""
+msgstr "Section sin titulo"
#: lib/section.php:106
msgid "More..."
-msgstr ""
+msgstr "Plus…"
#: lib/silenceform.php:67
msgid "Silence"
-msgstr ""
+msgstr "Silentiar"
#: lib/silenceform.php:78
msgid "Silence this user"
-msgstr ""
+msgstr "Silentiar iste usator"
#: lib/subgroupnav.php:83
#, php-format
msgid "People %s subscribes to"
-msgstr ""
+msgstr "Personas que %s seque"
#: lib/subgroupnav.php:91
#, php-format
msgid "People subscribed to %s"
-msgstr ""
+msgstr "Personas qui seque %s"
#: lib/subgroupnav.php:99
#, php-format
msgid "Groups %s is a member of"
-msgstr ""
+msgstr "Gruppos del quales %s es membro"
#: lib/subs.php:52
msgid "Already subscribed!"
-msgstr ""
+msgstr "Ja subscribite!"
#: lib/subs.php:56
msgid "User has blocked you."
-msgstr ""
+msgstr "Le usator te ha blocate."
#: lib/subs.php:63
msgid "Could not subscribe."
-msgstr ""
+msgstr "Non poteva subscriber te."
#: lib/subs.php:82
msgid "Could not subscribe other to you."
-msgstr ""
+msgstr "Non poteva subcriber altere persona a te."
#: lib/subs.php:137
msgid "Not subscribed!"
-msgstr ""
+msgstr "Non subscribite!"
#: lib/subs.php:142
msgid "Couldn't delete self-subscription."
-msgstr ""
+msgstr "Non poteva deler auto-subscription."
#: lib/subs.php:158
msgid "Couldn't delete subscription."
-msgstr ""
+msgstr "Non poteva deler subscription."
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
-msgstr ""
+msgstr "Nube de etiquettas de personas como auto-etiquettate"
#: lib/subscriberspeopletagcloudsection.php:48
#: lib/subscriptionspeopletagcloudsection.php:48
msgid "People Tagcloud as tagged"
-msgstr ""
+msgstr "Nube de etiquetta de personas como etiquettate"
#: lib/tagcloudsection.php:56
msgid "None"
-msgstr ""
+msgstr "Nulle"
#: lib/topposterssection.php:74
msgid "Top posters"
-msgstr ""
+msgstr "Qui scribe le plus"
#: lib/unsandboxform.php:69
msgid "Unsandbox"
-msgstr ""
+msgstr "Retirar del cassa de sablo"
#: lib/unsandboxform.php:80
msgid "Unsandbox this user"
-msgstr ""
+msgstr "Retirar iste usator del cassa de sablo"
#: lib/unsilenceform.php:67
msgid "Unsilence"
-msgstr ""
+msgstr "Dissilentiar"
#: lib/unsilenceform.php:78
msgid "Unsilence this user"
-msgstr ""
+msgstr "Non plus silentiar iste usator"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
-msgstr ""
+msgstr "Cancellar subscription a iste usator"
#: lib/unsubscribeform.php:137
msgid "Unsubscribe"
-msgstr ""
+msgstr "Cancellar subscription"
#: lib/userprofile.php:116
msgid "Edit Avatar"
-msgstr ""
+msgstr "Modificar avatar"
#: lib/userprofile.php:236
msgid "User actions"
-msgstr ""
+msgstr "Actiones de usator"
#: lib/userprofile.php:248
msgid "Edit profile settings"
-msgstr ""
+msgstr "Modificar configuration de profilo"
#: lib/userprofile.php:249
msgid "Edit"
-msgstr ""
+msgstr "Modificar"
#: lib/userprofile.php:272
msgid "Send a direct message to this user"
-msgstr ""
+msgstr "Inviar un message directe a iste usator"
#: lib/userprofile.php:273
msgid "Message"
-msgstr ""
+msgstr "Message"
#: lib/userprofile.php:311
msgid "Moderate"
-msgstr ""
+msgstr "Moderar"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
-msgstr ""
+msgstr "alcun secundas retro"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
-msgstr ""
+msgstr "circa un minuta retro"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
-msgstr ""
+msgstr "circa %d minutas retro"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
-msgstr ""
+msgstr "circa un hora retro"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
-msgstr ""
+msgstr "circa %d horas retro"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
-msgstr ""
+msgstr "circa un die retro"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
-msgstr ""
+msgstr "circa %d dies retro"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
-msgstr ""
+msgstr "circa un mense retro"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
-msgstr ""
+msgstr "circa %d menses retro"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
-msgstr ""
+msgstr "circa un anno retro"
#: lib/webcolor.php:82
#, php-format
msgid "%s is not a valid color!"
-msgstr ""
+msgstr "%s non es un color valide!"
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
+msgstr "%s non es un color valide! Usa 3 o 6 characteres hexadecimal."
#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
+msgstr "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d."
diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po
index 63432e0dc..e88583025 100644
--- a/locale/is/LC_MESSAGES/statusnet.po
+++ b/locale/is/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:24+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:11+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n"
@@ -196,7 +196,7 @@ msgstr "Færslur frá %1$s og vinum á %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Aðferð í forritsskilum fannst ekki!"
@@ -829,7 +829,7 @@ msgstr "Opna á þennan notanda"
msgid "Yes"
msgstr "Já"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Loka á þennan notanda"
@@ -1616,7 +1616,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr ""
@@ -1713,19 +1713,19 @@ msgstr "Listi yfir notendur í þessum hóp."
msgid "Admin"
msgstr "Stjórnandi"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Loka"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2128,21 +2128,21 @@ msgstr ""
"notendanafn? [Nýskráðu þig](%%action.register%%) eða prófaðu [OpenID](%%"
"action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
@@ -2347,8 +2347,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Enginn stuðningur við gagnasnið."
@@ -4492,7 +4492,7 @@ msgstr "Vandamál komu upp við að vista babl."
msgid "DB error inserting reply: %s"
msgstr "Gagnagrunnsvilla við innsetningu svars: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -6088,47 +6088,47 @@ msgstr "Skilaboð"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "fyrir nokkrum sekúndum"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "fyrir um einni mínútu síðan"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "fyrir um %d mínútum síðan"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "fyrir um einum klukkutíma síðan"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "fyrir um %d klukkutímum síðan"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "fyrir um einum degi síðan"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "fyrir um %d dögum síðan"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "fyrir um einum mánuði síðan"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "fyrir um %d mánuðum síðan"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "fyrir um einu ári síðan"
diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po
index b9a92a4bf..37ac228b2 100644
--- a/locale/it/LC_MESSAGES/statusnet.po
+++ b/locale/it/LC_MESSAGES/statusnet.po
@@ -1,6 +1,5 @@
# Translation of StatusNet to Italian
#
-# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Milocasagrande
# Author@translatewiki.net: Nemo bis
# --
@@ -10,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:27+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:14+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
@@ -200,7 +199,7 @@ msgstr "Messaggi da %1$s e amici su %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Metodo delle API non trovato."
@@ -484,12 +483,11 @@ msgstr "Gruppi su %s"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Nessun parametro oauth_token fornito."
#: actions/apioauthauthorize.php:106
-#, fuzzy
msgid "Invalid token."
-msgstr "Dimensione non valida."
+msgstr "Token non valido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -532,9 +530,9 @@ msgstr ""
"accesso."
#: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
msgid "The request token %s has been denied and revoked."
-msgstr "Il token di richiesta %s è stato rifiutato."
+msgstr "Il token di richiesta %s è stato rifiutato o revocato."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -560,6 +558,9 @@ msgid ""
"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
"give access to your %4$s account to third parties you trust."
msgstr ""
+"L'applicazione <strong>%1$s</strong> di <strong>%2$s</strong> vorrebbe poter "
+"<strong>%3$s</strong> ai dati del tuo account %4$s. È consigliato fornire "
+"accesso al proprio account %4$s solo ad applicazioni di cui ci si può fidare."
#: actions/apioauthauthorize.php:310 lib/action.php:441
msgid "Account"
@@ -579,12 +580,10 @@ msgid "Password"
msgstr "Password"
#: actions/apioauthauthorize.php:328
-#, fuzzy
msgid "Deny"
msgstr "Nega"
#: actions/apioauthauthorize.php:334
-#, fuzzy
msgid "Allow"
msgstr "Consenti"
@@ -826,7 +825,7 @@ msgstr "Non bloccare questo utente"
msgid "Yes"
msgstr "Sì"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Blocca questo utente"
@@ -909,7 +908,6 @@ msgid "Couldn't delete email confirmation."
msgstr "Impossibile eliminare l'email di conferma."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
msgstr "Conferma indirizzo"
@@ -928,20 +926,17 @@ msgid "Notices"
msgstr "Messaggi"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "Devi eseguire l'accesso per modificare un gruppo."
+msgstr "Devi eseguire l'accesso per eliminare un'applicazione."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "Il messaggio non ha un profilo"
+msgstr "Applicazione non trovata."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
-#, fuzzy
msgid "You are not the owner of this application."
-msgstr "Non fai parte di questo gruppo."
+msgstr "Questa applicazione non è di tua proprietà."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
@@ -950,29 +945,25 @@ msgid "There was a problem with your session token."
msgstr "Si è verificato un problema con il tuo token di sessione."
#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
msgid "Delete application"
-msgstr "Nessun messaggio."
+msgstr "Elimina applicazione"
#: actions/deleteapplication.php:149
-#, fuzzy
msgid ""
"Are you sure you want to delete this application? This will clear all data "
"about the application from the database, including all existing user "
"connections."
msgstr ""
-"Vuoi eliminare questo utente? Questa azione eliminerà tutti i dati "
-"dell'utente dal database, senza una copia di sicurezza."
+"Vuoi eliminare questa applicazione? Questa azione eliminerà tutti i dati "
+"riguardo all'applicazione dal database, comprese tutte le connessioni utente."
#: actions/deleteapplication.php:156
-#, fuzzy
msgid "Do not delete this application"
-msgstr "Non eliminare il messaggio"
+msgstr "Non eliminare l'applicazione"
#: actions/deleteapplication.php:160
-#, fuzzy
msgid "Delete this application"
-msgstr "Elimina questo messaggio"
+msgstr "Elimina l'applicazione"
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1153,86 +1144,74 @@ msgid "Add to favorites"
msgstr "Aggiungi ai preferiti"
#: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
msgid "No such document \"%s\""
-msgstr "Nessun documento."
+msgstr "Nessun documento \"%s\""
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
-msgstr "Altre opzioni"
+msgstr "Modifica applicazione"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Devi eseguire l'accesso per modificare un gruppo."
+msgstr "Devi eseguire l'accesso per modificare un'applicazione."
#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Nessun messaggio."
+msgstr "Nessuna applicazione."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Usa questo modulo per modificare il gruppo."
+msgstr "Usa questo modulo per modificare la tua applicazione."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Stessa password di sopra; richiesta"
+msgstr "Il nome è richiesto."
#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
msgid "Name is too long (max 255 chars)."
-msgstr "Nome troppo lungo (max 255 caratteri)."
+msgstr "Il nome è troppo lungo (max 255 caratteri)."
#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
msgid "Name already in use. Try another one."
-msgstr "Soprannome già in uso. Prova con un altro."
+msgstr "Nome già in uso. Prova con un altro."
#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
msgid "Description is required."
-msgstr "Descrizione"
+msgstr "La descrizione è richiesta."
#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "L'URL sorgente è troppo lungo."
#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
msgid "Source URL is not valid."
-msgstr "L'URL \"%s\" dell'immagine non è valido."
+msgstr "L'URL sorgente non è valido."
#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "L'organizzazione è richiesta."
#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
msgid "Organization is too long (max 255 chars)."
-msgstr "Ubicazione troppo lunga (max 255 caratteri)."
+msgstr "L'organizzazione è troppo lunga (max 255 caratteri)."
#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Il sito web dell'organizzazione è richiesto."
#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Il callback è troppo lungo."
#: actions/editapplication.php:225 actions/newapplication.php:215
-#, fuzzy
msgid "Callback URL is not valid."
-msgstr "L'URL \"%s\" dell'immagine non è valido."
+msgstr "L'URL di callback non è valido."
#: actions/editapplication.php:258
-#, fuzzy
msgid "Could not update application."
-msgstr "Impossibile aggiornare il gruppo."
+msgstr "Impossibile aggiornare l'applicazione."
#: actions/editgroup.php:56
#, php-format
@@ -1609,7 +1588,7 @@ msgstr "L'utente è già bloccato dal gruppo."
msgid "User is not a member of group."
msgstr "L'utente non fa parte del gruppo."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Blocca l'utente dal gruppo"
@@ -1711,19 +1690,19 @@ msgstr "Un elenco degli utenti in questo gruppo."
msgid "Admin"
msgstr "Amministra"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blocca"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Rende l'utente amministratore del gruppo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Rendi amm."
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Rende questo utente un amministratore"
@@ -1905,9 +1884,9 @@ msgid "That is not your Jabber ID."
msgstr "Quello non è il tuo ID di Jabber."
#: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
msgid "Inbox for %1$s - page %2$d"
-msgstr "Casella posta in arrivo di %s"
+msgstr "Casella posta in arrivo di %s - pagina %2$d"
#: actions/inbox.php:62
#, php-format
@@ -2129,22 +2108,22 @@ msgstr ""
"Accedi col tuo nome utente e password. Non hai ancora un nome utente? [Crea]"
"(%%action.register%%) un nuovo account."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Solo gli amministratori possono rendere un altro utente amministratori."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s è già amministratore del gruppo \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Impossibile recuperare la membership per %1$s nel gruppo %2$s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Impossibile rendere %1$s un amministratore del gruppo %2$s"
@@ -2154,28 +2133,24 @@ msgid "No current status"
msgstr "Nessun messaggio corrente"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
-msgstr "Nessun messaggio."
+msgstr "Nuova applicazione"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Devi eseguire l'accesso per creare un gruppo."
+msgstr "Devi eseguire l'accesso per registrare un'applicazione."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Usa questo modulo per creare un nuovo gruppo."
+msgstr "Usa questo modulo per registrare un'applicazione."
#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "L'URL sorgente è richiesto."
#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
msgid "Could not create application."
-msgstr "Impossibile creare gli alias."
+msgstr "Impossibile creare l'applicazione."
#: actions/newgroup.php:53
msgid "New group"
@@ -2242,7 +2217,7 @@ msgid "Text search"
msgstr "Cerca testo"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
msgstr "Risultati della ricerca per \"%1$s\" su %2$s"
@@ -2290,49 +2265,48 @@ msgid "Nudge sent!"
msgstr "Richiamo inviato!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Devi eseguire l'accesso per modificare un gruppo."
+msgstr "Devi eseguire l'accesso per poter elencare le tue applicazioni."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Altre opzioni"
+msgstr "Applicazioni OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Applicazioni che hai registrato"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Non hai ancora registrato alcuna applicazione."
#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Applicazioni collegate"
#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Hai consentito alle seguenti applicazioni di accedere al tuo account."
#: actions/oauthconnectionssettings.php:175
-#, fuzzy
msgid "You are not a user of that application."
-msgstr "Non fai parte di quel gruppo."
+msgstr "Non sei un utente di quella applicazione."
#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Impossibile revocare l'accesso per l'applicazione: "
#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "Non hai autorizzato alcuna applicazione all'uso del tuo account."
#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
+"Gli sviluppatori possono modificare le impostazioni di registrazione per le "
+"loro applicazioni "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2351,8 +2325,8 @@ msgstr "tipo di contenuto "
msgid "Only "
msgstr "Solo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Non è un formato di dati supportato."
@@ -2365,7 +2339,6 @@ msgid "Notice Search"
msgstr "Cerca messaggi"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Altre impostazioni"
@@ -2398,34 +2371,29 @@ msgid "URL shortening service is too long (max 50 chars)."
msgstr "Il servizio di riduzione degli URL è troppo lungo (max 50 caratteri)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
msgstr "Nessun ID utente specificato."
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
msgstr "Nessun token di accesso specificato."
#: actions/otp.php:90
-#, fuzzy
msgid "No login token requested."
msgstr "Nessun token di accesso richiesto."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
msgstr "Token di accesso specificato non valido."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
msgstr "Token di accesso scaduto."
#: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
msgid "Outbox for %1$s - page %2$d"
-msgstr "Casella posta inviata di %s"
+msgstr "Casella posta inviata di %s - pagina %2$d"
#: actions/outbox.php:61
#, php-format
@@ -3266,9 +3234,9 @@ msgid "Replies to %s"
msgstr "Risposte a %s"
#: actions/replies.php:127
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s, page %2$d"
-msgstr "Risposte a %1$s su %2$s!"
+msgstr "Risposte a %1$s, pagina %2$d"
#: actions/replies.php:144
#, php-format
@@ -3310,7 +3278,7 @@ msgid ""
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
"Puoi provare a [richiamare %1$s](../%2$s) o [scrivere qualche cosa alla sua "
-"attenzione](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+"attenzione](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/repliesrss.php:72
#, php-format
@@ -3335,9 +3303,8 @@ msgid "Sessions"
msgstr "Sessioni"
#: actions/sessionsadminpanel.php:65
-#, fuzzy
msgid "Session settings for this StatusNet site."
-msgstr "Impostazioni dell'aspetto per questo sito di StatusNet."
+msgstr "Impostazioni di sessione per questo sito di StatusNet."
#: actions/sessionsadminpanel.php:175
msgid "Handle sessions"
@@ -3361,18 +3328,16 @@ msgid "Save site settings"
msgstr "Salva impostazioni"
#: actions/showapplication.php:82
-#, fuzzy
msgid "You must be logged in to view an application."
-msgstr "Devi eseguire l'accesso per lasciare un gruppo."
+msgstr "Devi eseguire l'accesso per visualizzare un'applicazione."
#: actions/showapplication.php:157
-#, fuzzy
msgid "Application profile"
-msgstr "Il messaggio non ha un profilo"
+msgstr "Profilo applicazione"
#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Icona"
#: actions/showapplication.php:169 actions/version.php:195
#: lib/applicationeditform.php:195
@@ -3380,9 +3345,8 @@ msgid "Name"
msgstr "Nome"
#: actions/showapplication.php:178 lib/applicationeditform.php:222
-#, fuzzy
msgid "Organization"
-msgstr "Paginazione"
+msgstr "Organizzazione"
#: actions/showapplication.php:187 actions/version.php:198
#: lib/applicationeditform.php:209 lib/groupeditform.php:172
@@ -3397,56 +3361,56 @@ msgstr "Statistiche"
#: actions/showapplication.php:203
#, php-format
msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgstr "creata da %1$s - %2$s accessi predefiniti - %3$d utenti"
#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "Azioni applicazione"
#: actions/showapplication.php:236
msgid "Reset key & secret"
-msgstr ""
+msgstr "Reimposta chiave e segreto"
#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Informazioni applicazione"
#: actions/showapplication.php:263
msgid "Consumer key"
-msgstr ""
+msgstr "Chiave consumatore"
#: actions/showapplication.php:268
msgid "Consumer secret"
-msgstr ""
+msgstr "Segreto consumatore"
#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "URL token di richiesta"
#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "URL token di accesso"
#: actions/showapplication.php:283
-#, fuzzy
msgid "Authorize URL"
-msgstr "Autore"
+msgstr "URL di autorizzazione"
#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+"Nota: sono supportate firme HMAC-SHA1, ma non è supportato il metodo di "
+"firma di testo in chiaro."
#: actions/showapplication.php:309
-#, fuzzy
msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Vuoi eliminare questo messaggio?"
+msgstr "Ripristinare la chiave e il segreto?"
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s's favorite notices, page %2$d"
-msgstr "Messaggi preferiti di %s"
+msgstr "Messaggi preferiti di %1$s, pagina %2$d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
@@ -3505,9 +3469,9 @@ msgid "%s group"
msgstr "Gruppo %s"
#: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group, page %2$d"
-msgstr "Membri del gruppo %1$s, pagina %2$d"
+msgstr "Gruppi di %1$s, pagina %2$d"
#: actions/showgroup.php:218
msgid "Group profile"
@@ -3629,9 +3593,9 @@ msgid " tagged %s"
msgstr " etichettati con %s"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "Profili bloccati di %1$s, pagina %2$d"
+msgstr "%1$s, pagina %2$d"
#: actions/showstream.php:122
#, php-format
@@ -3731,7 +3695,7 @@ msgid "You must have a valid contact email address."
msgstr "Devi avere un'email di contatto valida."
#: actions/siteadminpanel.php:158
-#, fuzzy, php-format
+#, php-format
msgid "Unknown language \"%s\"."
msgstr "Lingua \"%s\" sconosciuta."
@@ -4065,9 +4029,9 @@ msgid "SMS"
msgstr "SMS"
#: actions/tag.php:68
-#, fuzzy, php-format
+#, php-format
msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Utenti auto-etichettati con %1$s - pagina %2$d"
+msgstr "Messaggi etichettati con %1$s, pagina %2$d"
#: actions/tag.php:86
#, php-format
@@ -4353,9 +4317,9 @@ msgid "Enjoy your hotdog!"
msgstr "Gustati il tuo hotdog!"
#: actions/usergroups.php:64
-#, fuzzy, php-format
+#, php-format
msgid "%1$s groups, page %2$d"
-msgstr "Membri del gruppo %1$s, pagina %2$d"
+msgstr "Gruppi di %1$s, pagina %2$d"
#: actions/usergroups.php:130
msgid "Search for more groups"
@@ -4456,19 +4420,16 @@ msgstr ""
"Un file di questa dimensione supererebbe la tua quota mensile di %d byte."
#: classes/Group_member.php:41
-#, fuzzy
msgid "Group join failed."
-msgstr "Profilo del gruppo"
+msgstr "Ingresso nel gruppo non riuscito."
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Impossibile aggiornare il gruppo."
+msgstr "Non si fa parte del gruppo."
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Profilo del gruppo"
+msgstr "Uscita dal gruppo non riuscita."
#: classes/Login_token.php:76
#, php-format
@@ -4524,16 +4485,15 @@ msgid "Problem saving notice."
msgstr "Problema nel salvare il messaggio."
#: classes/Notice.php:788
-#, fuzzy
msgid "Problem saving group inbox."
-msgstr "Problema nel salvare il messaggio."
+msgstr "Problema nel salvare la casella della posta del gruppo."
#: classes/Notice.php:848
#, php-format
msgid "DB error inserting reply: %s"
msgstr "Errore del DB nell'inserire la risposta: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4580,7 +4540,7 @@ msgid "Other options"
msgstr "Altre opzioni"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
msgstr "%1$s - %2$s"
@@ -4737,16 +4697,19 @@ msgstr "Licenza del contenuto del sito"
#: lib/action.php:806
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "I contenuti e i dati di %1$s sono privati e confidenziali."
#: lib/action.php:811
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
+"I contenuti e i dati sono copyright di %1$s. Tutti i diritti riservati."
#: lib/action.php:814
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
+"I contenuti e i dati sono forniti dai collaboratori. Tutti i diritti "
+"riservati."
#: lib/action.php:826
msgid "All "
@@ -4797,102 +4760,99 @@ msgid "Design configuration"
msgstr "Configurazione aspetto"
#: lib/adminpanelaction.php:322
-#, fuzzy
msgid "User configuration"
-msgstr "Configurazione percorsi"
+msgstr "Configurazione utente"
#: lib/adminpanelaction.php:327
-#, fuzzy
msgid "Access configuration"
-msgstr "Configurazione aspetto"
+msgstr "Configurazione di accesso"
#: lib/adminpanelaction.php:332
msgid "Paths configuration"
msgstr "Configurazione percorsi"
#: lib/adminpanelaction.php:337
-#, fuzzy
msgid "Sessions configuration"
-msgstr "Configurazione aspetto"
+msgstr "Configurazione sessioni"
#: lib/apiauth.php:95
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
+"Le risorse API richiedono accesso lettura-scrittura, ma si dispone del solo "
+"accesso in lettura."
#: lib/apiauth.php:273
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
+"Tentativo di autorizzazione API non riuscito, soprannome = %1$s, proxy = %2"
+"$s, IP = %3$s"
#: lib/applicationeditform.php:136
msgid "Edit application"
-msgstr ""
+msgstr "Modifica applicazione"
#: lib/applicationeditform.php:184
msgid "Icon for this application"
-msgstr ""
+msgstr "Icona per questa applicazione"
#: lib/applicationeditform.php:204
-#, fuzzy, php-format
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Descrivi il gruppo o l'argomento in %d caratteri"
+msgstr "Descrivi l'applicazione in %d caratteri"
#: lib/applicationeditform.php:207
-#, fuzzy
msgid "Describe your application"
-msgstr "Descrivi il gruppo o l'argomento"
+msgstr "Descrivi l'applicazione"
#: lib/applicationeditform.php:216
-#, fuzzy
msgid "Source URL"
-msgstr "Sorgenti"
+msgstr "URL sorgente"
#: lib/applicationeditform.php:218
-#, fuzzy
msgid "URL of the homepage of this application"
-msgstr "URL della pagina web, blog del gruppo o l'argomento"
+msgstr "URL della pagina web di questa applicazione"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organizzazione responsabile per questa applicazione"
#: lib/applicationeditform.php:230
-#, fuzzy
msgid "URL for the homepage of the organization"
-msgstr "URL della pagina web, blog del gruppo o l'argomento"
+msgstr "URL della pagina web dell'organizzazione"
#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
-msgstr ""
+msgstr "URL verso cui redirigere dopo l'autenticazione"
#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Browser"
#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Desktop"
#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Tipo di applicazione, browser o desktop"
#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Sola lettura"
#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Lettura-scrittura"
#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
+"Accesso predefinito per questa applicazione, sola lettura o lettura-scrittura"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Rimuovi"
+msgstr "Revoca"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -5255,13 +5215,12 @@ msgid "Updates by SMS"
msgstr "Messaggi via SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Connetti"
+msgstr "Connessioni"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Applicazioni collegate autorizzate"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -5454,9 +5413,9 @@ msgid "[%s]"
msgstr "[%s]"
#: lib/jabber.php:400
-#, fuzzy, php-format
+#, php-format
msgid "Unknown inbox source %d."
-msgstr "Lingua \"%s\" sconosciuta."
+msgstr "Sorgente casella in arrivo %d sconosciuta."
#: lib/joinform.php:114
msgid "Join"
@@ -5844,12 +5803,10 @@ msgid "Attach a file"
msgstr "Allega un file"
#: lib/noticeform.php:212
-#, fuzzy
msgid "Share my location"
msgstr "Condividi la mia posizione"
#: lib/noticeform.php:215
-#, fuzzy
msgid "Do not share my location"
msgstr "Non condividere la mia posizione"
@@ -5858,6 +5815,8 @@ msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
+"Il recupero della tua posizione geografica sta impiegando più tempo del "
+"previsto. Riprova più tardi."
#: lib/noticelist.php:428
#, php-format
@@ -6043,7 +6002,7 @@ msgstr "Ripeti questo messaggio"
#: lib/router.php:665
msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Nessun utente singolo definito per la modalità single-user."
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -6210,47 +6169,47 @@ msgstr "Messaggio"
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "pochi secondi fa"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "circa un minuto fa"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minuti fa"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "circa un'ora fa"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "circa %d ore fa"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "circa un giorno fa"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "circa %d giorni fa"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "circa un mese fa"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "circa %d mesi fa"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "circa un anno fa"
diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po
index 82e67f804..3063f9538 100644
--- a/locale/ja/LC_MESSAGES/statusnet.po
+++ b/locale/ja/LC_MESSAGES/statusnet.po
@@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:30+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:17+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
@@ -196,7 +196,7 @@ msgstr "%2$s ã« %1$s ã¨å‹äººã‹ã‚‰ã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
@@ -818,7 +818,7 @@ msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’アンブロックã™ã‚‹"
msgid "Yes"
msgstr "Yes"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロックã™ã‚‹"
@@ -1582,7 +1582,7 @@ msgstr "ユーザã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚
msgid "User is not a member of group."
msgstr "ユーザã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "グループã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ã‚’ブロック"
@@ -1683,19 +1683,19 @@ msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¦ãƒ¼ã‚¶ã®ãƒªã‚¹ãƒˆã€‚"
msgid "Admin"
msgstr "管ç†è€…"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "ブロック"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "ユーザをグループã®ç®¡ç†è€…ã«ã™ã‚‹"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "管ç†è€…ã«ã™ã‚‹"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’管ç†è€…ã«ã™ã‚‹"
@@ -2100,21 +2100,21 @@ msgstr ""
"ユーザåã¨ãƒ‘スワードã§ã€ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 ã¾ã ãƒ¦ãƒ¼ã‚¶åã‚’æŒã£ã¦ã„ã¾ã›ã‚“"
"ã‹? æ–°ã—ã„アカウントを [登録](%%action.register%%)。"
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "管ç†è€…ã ã‘ãŒåˆ¥ã®ãƒ¦ãƒ¼ã‚¶ã‚’管ç†è€…ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s ã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ— \"%2$s\" ã®ç®¡ç†è€…ã§ã™ã€‚"
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "%1$s ã®ä¼šå“¡è³‡æ ¼è¨˜éŒ²ã‚’グループ %2$s 中ã‹ã‚‰å–å¾—ã§ãã¾ã›ã‚“。"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "%1$s をグループ %2$s ã®ç®¡ç†è€…ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
@@ -2316,8 +2316,8 @@ msgstr "内容種別 "
msgid "Only "
msgstr "ã ã‘ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„データ形å¼ã€‚"
@@ -4474,7 +4474,7 @@ msgstr "グループå—信箱をä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
msgid "DB error inserting reply: %s"
msgstr "返信を追加ã™ã‚‹éš›ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¨ãƒ©ãƒ¼ : %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -6108,47 +6108,47 @@ msgstr "メッセージ"
msgid "Moderate"
msgstr "管ç†"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "数秒å‰"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "ç´„ 1 分å‰"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "ç´„ %d 分å‰"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "ç´„ 1 時間å‰"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "ç´„ %d 時間å‰"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "ç´„ 1 æ—¥å‰"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "ç´„ %d æ—¥å‰"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "ç´„ 1 ヵ月å‰"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "ç´„ %d ヵ月å‰"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "ç´„ 1 å¹´å‰"
diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po
index d3bd13662..7be2acfca 100644
--- a/locale/ko/LC_MESSAGES/statusnet.po
+++ b/locale/ko/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:33+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:20+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"
@@ -195,7 +195,7 @@ msgstr "%1$s ë° %2$sì— ìžˆëŠ” ì¹œêµ¬ë“¤ì˜ ì—…ë°ì´íŠ¸!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다."
@@ -834,7 +834,7 @@ msgstr "ì´ ì‚¬ìš©ìžë¥¼ 차단해제합니다."
msgid "Yes"
msgstr "네, 맞습니다."
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "ì´ ì‚¬ìš©ìž ì°¨ë‹¨í•˜ê¸°"
@@ -1635,7 +1635,7 @@ msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
msgid "User is not a member of group."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "사용ìžë¥¼ 차단합니다."
@@ -1740,21 +1740,21 @@ msgstr "ì´ ê·¸ë£¹ì˜ íšŒì›ë¦¬ìŠ¤íŠ¸"
msgid "Admin"
msgstr "관리ìž"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "차단하기"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
#, fuzzy
msgid "Make user an admin of the group"
msgstr "관리ìžë§Œ ê·¸ë£¹ì„ íŽ¸ì§‘í•  수 있습니다."
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
#, fuzzy
msgid "Make Admin"
msgstr "관리ìž"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2146,21 +2146,21 @@ msgstr ""
"action.register%%) 새 ê³„ì •ì„ ìƒì„± ë˜ëŠ” [OpenID](%%action.openidlogin%%)를 사"
"용해 보세요."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "그룹 %sì—ì„œ %s 사용ìžë¥¼ 제거할 수 없습니다."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "관리ìžë§Œ ê·¸ë£¹ì„ íŽ¸ì§‘í•  수 있습니다."
@@ -2365,8 +2365,8 @@ msgstr "ì—°ê²°"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "지ì›í•˜ëŠ” 형ì‹ì˜ ë°ì´í„°ê°€ 아닙니다."
@@ -4517,7 +4517,7 @@ msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "DB error inserting reply: %s"
msgstr "ë‹µì‹ ì„ ì¶”ê°€ í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -6117,47 +6117,47 @@ msgstr "메시지"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "몇 초 전"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "1분 전"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "%d분 전"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "1시간 전"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "%d시간 전"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "하루 전"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "%dì¼ ì „"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "1달 전"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "%d달 전"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "1ë…„ ì „"
diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po
index 9aa7d12a1..92209e72e 100644
--- a/locale/mk/LC_MESSAGES/statusnet.po
+++ b/locale/mk/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:36+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:23+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
@@ -199,7 +199,7 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API методот не е пронајден."
@@ -828,7 +828,7 @@ msgstr "Ðе го блокирај кориÑников"
msgid "Yes"
msgstr "Да"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокирај го кориÑников"
@@ -1591,7 +1591,7 @@ msgstr "КориÑникот е веќе блокиран од оваа груп
msgid "User is not a member of group."
msgstr "КориÑникот не членува во групата."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Блокирај кориÑник од група"
@@ -1695,19 +1695,19 @@ msgstr "ЛиÑта на кориÑниците на овааг група."
msgid "Admin"
msgstr "ÐдминиÑтратор"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Блокирај"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Ðаправи го кориÑникот админиÑтратор на групата"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Ðаправи го/ја админиÑтратор"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Ðаправи го кориÑникот админиÑтратор"
@@ -2093,7 +2093,8 @@ msgstr "Запамети ме"
#: actions/login.php:237 actions/register.php:480
msgid "Automatically login in the future; not for shared computers!"
msgstr ""
-"Следниот пат најавете Ñе автоматÑки; не за компјутери кои ги делите Ñо други!"
+"Следниот пат најавете Ñе автоматÑки; не е за компјутери кои ги делите Ñо "
+"други!"
#: actions/login.php:247
msgid "Lost or forgotten password?"
@@ -2116,21 +2117,21 @@ msgstr ""
"Ðајавете Ñе Ñо Вашето кориÑничко име и лозинка. Сè уште немате кориÑничко "
"име? [РегиÑтрирајте](%%action.register%%) нова Ñметка."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Само админиÑтратор може да направи друг кориÑник админиÑтратор."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s веќе е админиÑтратор на групата „%2$s“."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ðе можам да добијам евиденција за членÑтво на %1$s во групата %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ðе можам да го направам кориÑникот %1$s админиÑтратор на групата %2$s."
@@ -2334,8 +2335,8 @@ msgstr "тип на Ñодржини "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Ова не е поддржан формат на податотека."
@@ -4514,7 +4515,7 @@ msgstr "Проблем при зачувувањето на групното пÑ
msgid "DB error inserting reply: %s"
msgstr "Одговор од внеÑот во базата: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -5251,8 +5252,8 @@ msgstr "Подигни податотека"
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
-"Ðе можете да подигнете личната позадинÑка Ñлика. МакÑималната дозволена "
-"големина изнеÑува 2МБ."
+"Можете да подигнете лична позадинÑка Ñлика. МакÑималната дозволена големина "
+"изнеÑува 2МБ."
#: lib/designsettings.php:418
msgid "Design defaults restored."
@@ -6193,47 +6194,47 @@ msgstr "Порака"
msgid "Moderate"
msgstr "Модерирај"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "пред неколку Ñекунди"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "пред една минута"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "пред %d минути"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "пред еден чаÑ"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "пред %d чаÑа"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "пред еден ден"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "пред %d денови"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "пред еден меÑец"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "пред %d меÑеца"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "пред една година"
diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po
index 287b95b35..ab74ad1dc 100644
--- a/locale/nb/LC_MESSAGES/statusnet.po
+++ b/locale/nb/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:39+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:26+0000\n"
"Language-Team: Norwegian (bokmål)‬\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"
@@ -194,7 +194,7 @@ msgstr "Oppdateringer fra %1$s og venner på %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metode ikke funnet!"
@@ -812,7 +812,7 @@ msgstr "Ikke blokker denne brukeren"
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Blokker denne brukeren"
@@ -1576,7 +1576,7 @@ msgstr "Du er allerede logget inn!"
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr ""
@@ -1673,19 +1673,19 @@ msgstr "En liste over brukerne i denne gruppen."
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blokkér"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Gjør brukeren til en administrator for gruppen"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Gjør til administrator"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Gjør denne brukeren til administrator"
@@ -2062,21 +2062,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Du er allerede logget inn!"
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Klarte ikke å oppdatere bruker."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Gjør brukeren til en administrator for gruppen"
@@ -2271,8 +2271,8 @@ msgstr "innholdstype "
msgid "Only "
msgstr "Bare "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4365,7 +4365,7 @@ msgstr ""
msgid "DB error inserting reply: %s"
msgstr ""
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -5952,47 +5952,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "noen få sekunder siden"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "omtrent ett minutt siden"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "omtrent %d minutter siden"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "omtrent én time siden"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "omtrent %d timer siden"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "omtrent én dag siden"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "omtrent %d dager siden"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "omtrent én måned siden"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "omtrent %d måneder siden"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "omtrent ett år siden"
diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po
index cad772155..b1a54d06a 100644
--- a/locale/nl/LC_MESSAGES/statusnet.po
+++ b/locale/nl/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:45+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:32+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
@@ -198,7 +198,7 @@ msgstr "Updates van %1$s en vrienden op %2$s."
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "De API-functie is niet aangetroffen."
@@ -837,7 +837,7 @@ msgstr "Gebruiker niet blokkeren"
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Deze gebruiker blokkeren"
@@ -1605,7 +1605,7 @@ msgstr "Deze gebruiker is al de toegang tot de groep ontzegd."
msgid "User is not a member of group."
msgstr "De gebruiker is geen lid van de groep."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Gebruiker toegang tot de groep blokkeren"
@@ -1709,19 +1709,19 @@ msgstr "Ledenlijst van deze groep"
msgid "Admin"
msgstr "Beheerder"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blokkeren"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Deze gebruiker groepsbeheerder maken"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Beheerder maken"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Deze gebruiker beheerder maken"
@@ -2133,21 +2133,21 @@ msgstr ""
"Meld u aan met uw gebruikersnaam en wachtwoord. Hebt u nog geen "
"gebruikersnaam? [Registreer een nieuwe gebruiker](%%action.register%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Alleen beheerders kunnen andere gebruikers beheerder maken."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s is al beheerder van de groep \"%2$s\""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Het was niet mogelijk te bevestigen dat %1$s lid is van de groep %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Het is niet mogelijk %1$s beheerder te maken van de groep %2$s."
@@ -2354,8 +2354,8 @@ msgstr "inhoudstype "
msgid "Only "
msgstr "Alleen "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Geen ondersteund gegevensformaat."
@@ -4423,9 +4423,9 @@ msgid ""
"for more details. "
msgstr ""
"Dit programma wordt verspreid in de hoop dat het bruikbaar is, maar ZONDER "
-"ENIGE GARANTIE; zonder zelfde impliciete garantie van VERMARKTBAARHEID of "
-"GESCHIKTHEID VOOR EEN SPECIFIEK DOEL. Zie de GNU Affero General Public "
-"License voor meer details. "
+"ENIGE GARANTIE; zelfs zonder de impliciete garantie van VERKOOPBAARHEID of "
+"GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU Affero General Public License "
+"voor meer details. "
#: actions/version.php:180
#, php-format
@@ -4551,7 +4551,7 @@ msgid "DB error inserting reply: %s"
msgstr ""
"Er is een databasefout opgetreden bij het invoegen van het antwoord: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -6237,47 +6237,47 @@ msgstr "Bericht"
msgid "Moderate"
msgstr "Modereren"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "een paar seconden geleden"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "ongeveer een minuut geleden"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "ongeveer %d minuten geleden"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "ongeveer een uur geleden"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "ongeveer %d uur geleden"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "ongeveer een dag geleden"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "ongeveer %d dagen geleden"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "ongeveer een maand geleden"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "ongeveer %d maanden geleden"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "ongeveer een jaar geleden"
diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po
index 5a6d256b9..e3e2cf80e 100644
--- a/locale/nn/LC_MESSAGES/statusnet.po
+++ b/locale/nn/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:42+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:29+0000\n"
"Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"
@@ -195,7 +195,7 @@ msgstr "Oppdateringar frå %1$s og vener på %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Fann ikkje API-metode."
@@ -832,7 +832,7 @@ msgstr "LÃ¥s opp brukaren"
msgid "Yes"
msgstr "Jau"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Blokkér denne brukaren"
@@ -1635,7 +1635,7 @@ msgstr "Brukar har blokkert deg."
msgid "User is not a member of group."
msgstr "Du er ikkje medlem av den gruppa."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "Blokker brukaren"
@@ -1740,21 +1740,21 @@ msgstr "Ei liste over brukarane i denne gruppa."
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blokkér"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
#, fuzzy
msgid "Make user an admin of the group"
msgstr "Du må være administrator for å redigere gruppa"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
#, fuzzy
msgid "Make Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2149,21 +2149,21 @@ msgstr ""
"%action.register%%) ein ny konto, eller prøv [OpenID](%%action.openidlogin%"
"%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Brukar har blokkert deg."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Kunne ikkje fjerne %s fra %s gruppa "
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Du må være administrator for å redigere gruppa"
@@ -2370,8 +2370,8 @@ msgstr "Kopla til"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Ikkje eit støtta dataformat."
@@ -4534,7 +4534,7 @@ msgstr "Eit problem oppstod ved lagring av notis."
msgid "DB error inserting reply: %s"
msgstr "Databasefeil, kan ikkje lagra svar: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -6144,47 +6144,47 @@ msgstr "Melding"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "eit par sekund sidan"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "omtrent eitt minutt sidan"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "~%d minutt sidan"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "omtrent ein time sidan"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "~%d timar sidan"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "omtrent ein dag sidan"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "~%d dagar sidan"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "omtrent ein månad sidan"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "~%d månadar sidan"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "omtrent eitt år sidan"
diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po
index 093192553..a13f6362b 100644
--- a/locale/pl/LC_MESSAGES/statusnet.po
+++ b/locale/pl/LC_MESSAGES/statusnet.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:48+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:35+0000\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n"
@@ -201,7 +201,7 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Nie odnaleziono metody API."
@@ -823,7 +823,7 @@ msgstr "Nie blokuj tego użytkownika"
msgid "Yes"
msgstr "Tak"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Zablokuj tego użytkownika"
@@ -1581,7 +1581,7 @@ msgstr "Użytkownik został już zablokował w grupie."
msgid "User is not a member of group."
msgstr "Użytkownik nie jest członkiem grupy."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Zablokuj użytkownika w grupie"
@@ -1679,19 +1679,19 @@ msgstr "Lista użytkowników znajdujących się w tej grupie."
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Zablokuj"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Uczyń użytkownika administratorem grupy"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Uczyń administratorem"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Uczyń tego użytkownika administratorem"
@@ -2099,21 +2099,21 @@ msgstr ""
"Zaloguj się za pomocą nazwy użytkownika i hasła. Nie masz ich jeszcze? "
"[Zarejestruj](%%action.register%%) nowe konto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Tylko administrator może uczynić innego użytkownika administratorem."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Użytkownika %1$s jest już administratorem grupy \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Nie można uzyskać wpisu członkostwa użytkownika %1$s w grupie %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Nie można uczynić %1$s administratorem grupy %2$s."
@@ -2314,8 +2314,8 @@ msgstr "typ zawartości "
msgid "Only "
msgstr "Tylko "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "To nie jest obsługiwany format danych."
@@ -4484,7 +4484,7 @@ msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy."
msgid "DB error inserting reply: %s"
msgstr "BÅ‚Ä…d bazy danych podczas wprowadzania odpowiedzi: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -6163,47 +6163,47 @@ msgstr "Wiadomość"
msgid "Moderate"
msgstr "Moderuj"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "kilka sekund temu"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "około minutę temu"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "około %d minut temu"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "około godzinę temu"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "około %d godzin temu"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "blisko dzień temu"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "około %d dni temu"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "około miesiąc temu"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "około %d miesięcy temu"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "około rok temu"
diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po
index 3258ec53c..a2c8fd60c 100644
--- a/locale/pt/LC_MESSAGES/statusnet.po
+++ b/locale/pt/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:51+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:39+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
@@ -198,7 +198,7 @@ msgstr "Actualizações de %1$s e amigos no %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Método da API não encontrado."
@@ -821,7 +821,7 @@ msgstr "Não bloquear este utilizador"
msgid "Yes"
msgstr "Sim"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este utilizador"
@@ -1604,7 +1604,7 @@ msgstr "Acesso do utilizador ao grupo já foi bloqueado."
msgid "User is not a member of group."
msgstr "Utilizador não é membro do grupo."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Bloquear acesso do utilizador ao grupo"
@@ -1706,19 +1706,19 @@ msgstr "Uma lista dos utilizadores neste grupo."
msgid "Admin"
msgstr "Gestor"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Tornar utilizador o gestor do grupo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Tornar Gestor"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Tornar este utilizador um gestor"
@@ -2126,21 +2126,21 @@ msgstr ""
"Entrar com o seu nome de utilizador e senha. Ainda não está registado? "
"[Registe](%%action.register%%) uma conta."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Só um gestor pode tornar outro utilizador num gestor."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s já é um administrador do grupo \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Não existe registo de %1$s ter entrado no grupo %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Não é possível tornar %1$s administrador do grupo %2$s."
@@ -2347,8 +2347,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Formato de dados não suportado."
@@ -4530,7 +4530,7 @@ msgstr "Problema na gravação da nota."
msgid "DB error inserting reply: %s"
msgstr "Ocorreu um erro na base de dados ao inserir a resposta: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -6203,47 +6203,47 @@ msgstr "Mensagem"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "há alguns segundos"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "há cerca de um minuto"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "há cerca de %d minutos"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "há cerca de uma hora"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "há cerca de %d horas"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "há cerca de um dia"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "há cerca de %d dias"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "há cerca de um mês"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "há cerca de %d meses"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "há cerca de um ano"
diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po
index 5470616fe..b9ffc361b 100644
--- a/locale/pt_BR/LC_MESSAGES/statusnet.po
+++ b/locale/pt_BR/LC_MESSAGES/statusnet.po
@@ -2,6 +2,7 @@
#
# Author@translatewiki.net: Aracnus
# Author@translatewiki.net: Ewout
+# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Vuln
# --
# This file is distributed under the same license as the StatusNet package.
@@ -10,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:54+0000\n"
+"POT-Creation-Date: 2010-02-14 20:05+0000\n"
+"PO-Revision-Date: 2010-02-14 20:07:20+0000\n"
"Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
@@ -26,14 +27,12 @@ msgid "Access"
msgstr "Acesso"
#: actions/accessadminpanel.php:65
-#, fuzzy
msgid "Site access settings"
-msgstr "Salvar as configurações do site"
+msgstr "Configurações de acesso ao site"
#: actions/accessadminpanel.php:158
-#, fuzzy
msgid "Registration"
-msgstr "Registrar-se"
+msgstr "Registro"
#: actions/accessadminpanel.php:161
msgid "Private"
@@ -72,9 +71,8 @@ msgid "Save"
msgstr "Salvar"
#: actions/accessadminpanel.php:189
-#, fuzzy
msgid "Save access settings"
-msgstr "Salvar as configurações do site"
+msgstr "Salvar as configurações de acesso"
#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
#: actions/showfavorites.php:137 actions/tag.php:51
@@ -174,8 +172,8 @@ msgstr ""
msgid "You and friends"
msgstr "Você e amigos"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Atualizações de %1$s e amigos no %2$s!"
@@ -196,12 +194,12 @@ msgstr "Atualizações de %1$s e amigos no %2$s!"
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
msgid "API method not found."
msgstr "O método da API não foi encontrado!"
@@ -487,12 +485,11 @@ msgstr "grupos no %s"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Não foi fornecido nenhum parâmetro oauth_token"
#: actions/apioauthauthorize.php:106
-#, fuzzy
msgid "Invalid token."
-msgstr "Tamanho inválido."
+msgstr "Token inválido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -518,16 +515,14 @@ msgid "Invalid nickname / password!"
msgstr "Nome de usuário e/ou senha inválido(s)!"
#: actions/apioauthauthorize.php:159
-#, fuzzy
msgid "Database error deleting OAuth application user."
msgstr ""
-"Erro no banco de dados durante a exclusão do aplicativo OAuth do usuário."
+"Erro no banco de dados durante a exclusão do usuário da aplicação OAuth."
#: actions/apioauthauthorize.php:185
-#, fuzzy
msgid "Database error inserting OAuth application user."
msgstr ""
-"Erro no banco de dados durante a inserção do aplicativo OAuth do usuário."
+"Erro no banco de dados durante a inserção do usuário da aplicativo OAuth."
#: actions/apioauthauthorize.php:214
#, php-format
@@ -539,9 +534,9 @@ msgstr ""
"acesso."
#: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
msgid "The request token %s has been denied and revoked."
-msgstr "O token de requisição %s foi negado."
+msgstr "O token %s solicitado foi negado e revogado."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -567,6 +562,10 @@ msgid ""
"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
"give access to your %4$s account to third parties you trust."
msgstr ""
+"A aplicação <strong>%1$s</strong> por <strong>%2$s</strong> solicita a "
+"permissão para <strong>%3$s</strong> os dados da sua conta %4$s. Você deve "
+"fornecer acesso à sua conta %4$s somente para terceiros nos quais você "
+"confia."
#: actions/apioauthauthorize.php:310 lib/action.php:441
msgid "Account"
@@ -650,7 +649,7 @@ msgstr "Formato não suportado."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoritas de %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s marcadas como favoritas por %2$s / %2$s."
@@ -661,7 +660,7 @@ msgstr "%1$s marcadas como favoritas por %2$s / %2$s."
msgid "%s timeline"
msgstr "Mensagens de %s"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
#: actions/userrss.php:92
#, php-format
msgid "Updates from %1$s on %2$s!"
@@ -677,12 +676,12 @@ msgstr "%1$s / Mensagens mencionando %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s mensagens em resposta a mensagens de %2$s / %3$s."
-#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Mensagens públicas de %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s mensagens de todo mundo!"
@@ -692,7 +691,7 @@ msgstr "%s mensagens de todo mundo!"
msgid "Repeated to %s"
msgstr "Repetida para %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Repetições de %s"
@@ -702,7 +701,7 @@ msgstr "Repetições de %s"
msgid "Notices tagged with %s"
msgstr "Mensagens etiquetadas como %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mensagens etiquetadas como %1$s no %2$s!"
@@ -831,7 +830,7 @@ msgstr "Não bloquear este usuário"
msgid "Yes"
msgstr "Sim"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este usuário"
@@ -932,14 +931,12 @@ msgid "Notices"
msgstr "Mensagens"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "Você precisa estar autenticado para editar uma aplicação."
+msgstr "Você precisa estar autenticado para excluir uma aplicação."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "Informação da aplicação"
+msgstr "A aplicação não foi encontrada."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
@@ -953,29 +950,26 @@ msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com o seu token de sessão."
#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
msgid "Delete application"
-msgstr "Editar a aplicação"
+msgstr "Excluir a aplicação"
#: actions/deleteapplication.php:149
-#, fuzzy
msgid ""
"Are you sure you want to delete this application? This will clear all data "
"about the application from the database, including all existing user "
"connections."
msgstr ""
-"Tem certeza que deseja excluir este usuário? Isso irá eliminar todos os "
-"dados deste usuário do banco de dados, sem cópia de segurança."
+"Tem certeza que deseja excluir esta aplicação? Isso eliminará todos os dados "
+"desta aplicação do banco de dados, incluindo todas as conexões existentes "
+"com os usuários."
#: actions/deleteapplication.php:156
-#, fuzzy
msgid "Do not delete this application"
-msgstr "Não excluir esta mensagem."
+msgstr "Não excluir esta aplicação"
#: actions/deleteapplication.php:160
-#, fuzzy
msgid "Delete this application"
-msgstr "Ãcone para esta aplicação"
+msgstr "Excluir esta aplicação"
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1032,8 +1026,8 @@ msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-"Tem certeza que deseja excluir este usuário? Isso irá eliminar todos os "
-"dados deste usuário do banco de dados, sem cópia de segurança."
+"Tem certeza que deseja excluir este usuário? Isso eliminará todos os dados "
+"deste usuário do banco de dados, sem cópia de segurança."
#: actions/deleteuser.php:148 lib/deleteuserform.php:77
msgid "Delete this user"
@@ -1156,12 +1150,11 @@ msgid "Add to favorites"
msgstr "Adicionar às favoritas"
#: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
msgid "No such document \"%s\""
-msgstr "Esse documento não existe."
+msgstr "O documento \"%s\" não existe"
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
msgstr "Editar a aplicação"
@@ -1187,9 +1180,8 @@ msgid "Name is too long (max 255 chars)."
msgstr "O nome é muito extenso (máx. 255 caracteres)."
#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
msgid "Name already in use. Try another one."
-msgstr "Esta identificação já está em uso. Tente outro."
+msgstr "Este nome já está em uso. Tente outro."
#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
@@ -1254,7 +1246,7 @@ msgstr "descrição muito extensa (máximo %d caracteres)."
msgid "Could not update group."
msgstr "Não foi possível atualizar o grupo."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:259 classes/User_group.php:423
msgid "Could not create aliases."
msgstr "Não foi possível criar os apelidos."
@@ -1603,7 +1595,7 @@ msgstr "O usuário já está bloqueado no grupo."
msgid "User is not a member of group."
msgstr "O usuário não é um membro do grupo"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Bloquear o usuário no grupo"
@@ -1706,19 +1698,19 @@ msgstr "Uma lista dos usuários deste grupo."
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Tornar o usuário um administrador do grupo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Tornar administrador"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Torna este usuário um administrador"
@@ -1901,9 +1893,9 @@ msgid "That is not your Jabber ID."
msgstr "Essa não é sua ID do Jabber."
#: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
msgid "Inbox for %1$s - page %2$d"
-msgstr "Recebidas por %s"
+msgstr "Recebidas por %s - pág. %2$d"
#: actions/inbox.php:62
#, php-format
@@ -2129,23 +2121,23 @@ msgstr ""
"Digite seu nome de usuário e senha. Ainda não possui um usuário? [Registre](%"
"%action.register%%) uma nova conta."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Somente um administrador pode dar privilégios de administração para outro "
"usuário."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s já é um administrador do grupo \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Não foi possível obter o registro de membro de %1$s no grupo %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Não foi possível tornar %1$s um administrador do grupo %2$s."
@@ -2155,7 +2147,6 @@ msgid "No current status"
msgstr "Nenhuma mensagem atual"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
msgstr "Nova aplicação"
@@ -2351,8 +2342,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Não é um formato de dados suportado."
@@ -2417,9 +2408,9 @@ msgid "Login token expired."
msgstr "O token de autenticação expirou."
#: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
msgid "Outbox for %1$s - page %2$d"
-msgstr "Enviadas de %s"
+msgstr "Enviadas por %s - pág. %2$d"
#: actions/outbox.php:61
#, php-format
@@ -4433,7 +4424,7 @@ msgstr "Versão"
#: actions/version.php:197
msgid "Author(s)"
-msgstr "Author(es)"
+msgstr "Autor(es)"
#: classes/File.php:144
#, php-format
@@ -4529,7 +4520,7 @@ msgstr "Problema no salvamento da mensagem."
msgid "DB error inserting reply: %s"
msgstr "Erro no banco de dados na inserção da reposta: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1271
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4539,11 +4530,11 @@ msgstr "RT @%1$s %2$s"
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bem vindo(a) a %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:413
msgid "Could not create group."
msgstr "Não foi possível criar o grupo."
-#: classes/User_group.php:409
+#: classes/User_group.php:442
msgid "Could not set group membership."
msgstr "Não foi possível configurar a associação ao grupo."
@@ -6205,47 +6196,47 @@ msgstr "Mensagem"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:867
+#: lib/util.php:871
msgid "a few seconds ago"
msgstr "alguns segundos atrás"
-#: lib/util.php:869
+#: lib/util.php:873
msgid "about a minute ago"
msgstr "cerca de 1 minuto atrás"
-#: lib/util.php:871
+#: lib/util.php:875
#, php-format
msgid "about %d minutes ago"
msgstr "cerca de %d minutos atrás"
-#: lib/util.php:873
+#: lib/util.php:877
msgid "about an hour ago"
msgstr "cerca de 1 hora atrás"
-#: lib/util.php:875
+#: lib/util.php:879
#, php-format
msgid "about %d hours ago"
msgstr "cerca de %d horas atrás"
-#: lib/util.php:877
+#: lib/util.php:881
msgid "about a day ago"
msgstr "cerca de 1 dia atrás"
-#: lib/util.php:879
+#: lib/util.php:883
#, php-format
msgid "about %d days ago"
msgstr "cerca de %d dias atrás"
-#: lib/util.php:881
+#: lib/util.php:885
msgid "about a month ago"
msgstr "cerca de 1 mês atrás"
-#: lib/util.php:883
+#: lib/util.php:887
#, php-format
msgid "about %d months ago"
msgstr "cerca de %d meses atrás"
-#: lib/util.php:885
+#: lib/util.php:889
msgid "about a year ago"
msgstr "cerca de 1 ano atrás"
diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po
index caa48b960..da1345a0d 100644
--- a/locale/ru/LC_MESSAGES/statusnet.po
+++ b/locale/ru/LC_MESSAGES/statusnet.po
@@ -12,12 +12,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:54:57+0000\n"
+"POT-Creation-Date: 2010-02-14 20:05+0000\n"
+"PO-Revision-Date: 2010-02-14 20:07:23+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: out-statusnet\n"
@@ -173,8 +173,8 @@ msgstr ""
msgid "You and friends"
msgstr "Ð’Ñ‹ и друзьÑ"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Обновлено от %1$s и его друзей на %2$s!"
@@ -195,12 +195,12 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!"
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Метод API не найден."
@@ -647,7 +647,7 @@ msgstr "Ðеподдерживаемый формат."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Любимое от %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %1$s, отмеченные как любимые %2$s / %2$s."
@@ -658,7 +658,7 @@ msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %1$s, отмеченные как любимые %2
msgid "%s timeline"
msgstr "Лента %s"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
#: actions/userrss.php:92
#, php-format
msgid "Updates from %1$s on %2$s!"
@@ -674,12 +674,12 @@ msgstr "%1$s / ОбновлениÑ, упоминающие %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s обновил Ñтот ответ на Ñообщение: %2$s / %3$s."
-#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %s от вÑех!"
@@ -689,7 +689,7 @@ msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %s от вÑех!"
msgid "Repeated to %s"
msgstr "Повторено Ð´Ð»Ñ %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Повторы за %s"
@@ -699,7 +699,7 @@ msgstr "Повторы за %s"
msgid "Notices tagged with %s"
msgstr "ЗапиÑи Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %1$s на %2$s!"
@@ -827,7 +827,7 @@ msgstr "Ðе блокировать Ñтого пользователÑ"
msgid "Yes"
msgstr "Да"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Заблокировать пользователÑ."
@@ -1243,7 +1243,7 @@ msgstr "Слишком длинное опиÑание (макÑимум %d Ñи
msgid "Could not update group."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ информацию о группе."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:259 classes/User_group.php:423
msgid "Could not create aliases."
msgstr "Ðе удаётÑÑ Ñоздать алиаÑÑ‹."
@@ -1597,7 +1597,7 @@ msgstr "Пользователь уже заблокирован из групп
msgid "User is not a member of group."
msgstr "Пользователь не ÑвлÑетÑÑ Ñ‡Ð»ÐµÐ½Ð¾Ð¼ Ñтой группы."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Заблокировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· группы."
@@ -1699,19 +1699,19 @@ msgstr "СпиÑок пользователей, ÑвлÑющихÑÑ Ñ‡Ð»ÐµÐ½Ð°
msgid "Admin"
msgstr "ÐаÑтройки"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Блокировать"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Сделать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором группы"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Сделать админиÑтратором"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Сделать Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором"
@@ -1743,7 +1743,7 @@ msgstr ""
"общими интереÑами. ПоÑле приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº группе и вы Ñможете отправлÑÑ‚ÑŒ "
"ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ вÑех её учаÑтников, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ «!имÑгруппы». Ðе видите "
"группу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€ÐµÑует? Попробуйте [найти её](%%%%action.groupsearch%"
-"%%%) или [Ñоздайте ÑобÑтвенную!](%%%%action.newgroup%%%%)"
+"%%%) или [Ñоздайте ÑобÑтвенную](%%%%action.newgroup%%%%)!"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
@@ -2119,22 +2119,22 @@ msgstr ""
"Вход Ñ Ð²Ð°ÑˆÐ¸Ð¼ логином и паролем. Ðет аккаунта? [ЗарегиÑтрируйте](%%action."
"register%%) новый аккаунт."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Только админиÑтратор может Ñделать другого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s уже ÑвлÑетÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором группы «%2$s»."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ запиÑÑŒ принадлежноÑти Ð´Ð»Ñ %1$s к группе %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ðевозможно Ñделать %1$s админиÑтратором группы %2$s."
@@ -2334,8 +2334,8 @@ msgstr "тип Ñодержимого "
msgid "Only "
msgstr "Только "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Ðеподдерживаемый формат данных."
@@ -4504,7 +4504,7 @@ msgstr "Проблемы Ñ Ñохранением входÑщих Ñообще
msgid "DB error inserting reply: %s"
msgstr "Ошибка баз данных при вÑтавке ответа Ð´Ð»Ñ %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1271
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4514,11 +4514,11 @@ msgstr "RT @%1$s %2$s"
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добро пожаловать на %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:413
msgid "Could not create group."
msgstr "Ðе удаётÑÑ Ñоздать группу."
-#: classes/User_group.php:409
+#: classes/User_group.php:442
msgid "Could not set group membership."
msgstr "Ðе удаётÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ членÑтво в группе."
@@ -6179,47 +6179,47 @@ msgstr "Сообщение"
msgid "Moderate"
msgstr "Модерировать"
-#: lib/util.php:867
+#: lib/util.php:871
msgid "a few seconds ago"
msgstr "пару Ñекунд назад"
-#: lib/util.php:869
+#: lib/util.php:873
msgid "about a minute ago"
msgstr "около минуты назад"
-#: lib/util.php:871
+#: lib/util.php:875
#, php-format
msgid "about %d minutes ago"
msgstr "около %d минут(ы) назад"
-#: lib/util.php:873
+#: lib/util.php:877
msgid "about an hour ago"
msgstr "около чаÑа назад"
-#: lib/util.php:875
+#: lib/util.php:879
#, php-format
msgid "about %d hours ago"
msgstr "около %d чаÑа(ов) назад"
-#: lib/util.php:877
+#: lib/util.php:881
msgid "about a day ago"
msgstr "около Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´"
-#: lib/util.php:879
+#: lib/util.php:883
#, php-format
msgid "about %d days ago"
msgstr "около %d днÑ(ей) назад"
-#: lib/util.php:881
+#: lib/util.php:885
msgid "about a month ago"
msgstr "около меÑÑца назад"
-#: lib/util.php:883
+#: lib/util.php:887
#, php-format
msgid "about %d months ago"
msgstr "около %d меÑÑца(ев) назад"
-#: lib/util.php:885
+#: lib/util.php:889
msgid "about a year ago"
msgstr "около года назад"
diff --git a/locale/statusnet.po b/locale/statusnet.po
index 987e4ad23..d1ee56f2c 100644
--- a/locale/statusnet.po
+++ b/locale/statusnet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
+"POT-Creation-Date: 2010-02-14 20:05+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"
@@ -158,8 +158,8 @@ msgstr ""
msgid "You and friends"
msgstr ""
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -180,12 +180,12 @@ msgstr ""
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
msgid "API method not found."
msgstr ""
@@ -618,7 +618,7 @@ msgstr ""
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -629,7 +629,7 @@ msgstr ""
msgid "%s timeline"
msgstr ""
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
+#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
#: actions/userrss.php:92
#, php-format
msgid "Updates from %1$s on %2$s!"
@@ -645,12 +645,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -660,7 +660,7 @@ msgstr ""
msgid "Repeated to %s"
msgstr ""
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr ""
@@ -670,7 +670,7 @@ msgstr ""
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -794,7 +794,7 @@ msgstr ""
msgid "Yes"
msgstr ""
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr ""
@@ -1201,7 +1201,7 @@ msgstr ""
msgid "Could not update group."
msgstr ""
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:259 classes/User_group.php:423
msgid "Could not create aliases."
msgstr ""
@@ -1534,7 +1534,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr ""
@@ -1629,19 +1629,19 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -1989,21 +1989,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr ""
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr ""
@@ -2195,8 +2195,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4214,7 +4214,7 @@ msgstr ""
msgid "DB error inserting reply: %s"
msgstr ""
-#: classes/Notice.php:1231
+#: classes/Notice.php:1271
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4224,11 +4224,11 @@ msgstr ""
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:413
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:409
+#: classes/User_group.php:442
msgid "Could not set group membership."
msgstr ""
@@ -5737,47 +5737,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:871
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:869
+#: lib/util.php:873
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:871
+#: lib/util.php:875
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:873
+#: lib/util.php:877
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:875
+#: lib/util.php:879
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:881
msgid "about a day ago"
msgstr ""
-#: lib/util.php:879
+#: lib/util.php:883
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:885
msgid "about a month ago"
msgstr ""
-#: lib/util.php:883
+#: lib/util.php:887
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:889
msgid "about a year ago"
msgstr ""
diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po
index a2645e8bb..a0d407c5c 100644
--- a/locale/sv/LC_MESSAGES/statusnet.po
+++ b/locale/sv/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:55:00+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:15:57+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: out-statusnet\n"
@@ -196,7 +196,7 @@ msgstr "Uppdateringar från %1$s och vänner på %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metod hittades inte."
@@ -815,7 +815,7 @@ msgstr "Blockera inte denna användare"
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Blockera denna användare"
@@ -1577,7 +1577,7 @@ msgstr "Användaren är redan blockerad från grupp."
msgid "User is not a member of group."
msgstr "Användare är inte en gruppmedlem."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Blockera användare från grupp"
@@ -1678,19 +1678,19 @@ msgstr "En lista av användarna i denna grupp."
msgid "Admin"
msgstr "Administratör"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Blockera"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Gör användare till en administratör för gruppen"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Gör till administratör"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Gör denna användare till administratör"
@@ -2097,21 +2097,21 @@ msgstr ""
"Logga in med ditt användarnamn och lösenord. Har du inget användarnamn ännu? "
"[Registrera](%%action.register%%) ett nytt konto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Bara en administratör kan göra en annan användare till administratör."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s är redan en administratör för grupp \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Kan inte hämta uppgift om medlemskap för %1$s i grupp %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Kan inte göra %1$s till en administratör för grupp %2$s."
@@ -2314,8 +2314,8 @@ msgstr "innehållstyp "
msgid "Only "
msgstr "Bara "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Ett dataformat som inte stödjs"
@@ -3548,8 +3548,8 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
-"**%s** är en användargrupp på %%%%site.name%%%%, en [mikroblogg](http://en."
-"wikipedia.org/wiki/Micro-blogging)tjänst baserad den fria programvaran "
+"**%s** är en användargrupp på %%%%site.name%%%%, en [mikroblogg](http://sv."
+"wikipedia.org/wiki/Mikroblogg)tjänst baserad den fria programvaran "
"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om "
"sina liv och intressen. "
@@ -3644,8 +3644,8 @@ msgid ""
"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://en."
-"wikipedia.org/wiki/Micro-blogging)tjänst baserad på den fria programvaran "
+"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://sv."
+"wikipedia.org/wiki/Mikroblogg)tjänst baserad på den fria programvaran "
"[StatusNet](http://status.net/). [Gå med nu](%%%%action.register%%%%) för "
"att följa **%s**s notiser och många fler! ([Läs mer](%%%%doc.help%%%%))"
@@ -3656,8 +3656,8 @@ msgid ""
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
-"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://en."
-"wikipedia.org/wiki/Micro-blogging)tjänst baserad på den fria programvaran "
+"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://sv."
+"wikipedia.org/wiki/Mikroblogg)tjänst baserad på den fria programvaran "
"[StatusNet](http://status.net/). "
#: actions/showstream.php:305
@@ -4376,7 +4376,7 @@ msgid ""
"along with this program. If not, see %s."
msgstr ""
"Du bör ha fått en kopia av GNU Affero General Public License tillsammans med "
-"detta program. Om inte, se% s."
+"detta program. Om inte, se %s."
#: actions/version.php:189
msgid "Plugins"
@@ -4483,7 +4483,7 @@ msgstr "Problem med att spara gruppinkorg."
msgid "DB error inserting reply: %s"
msgstr "Databasfel vid infogning av svar: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -6150,47 +6150,47 @@ msgstr "Meddelande"
msgid "Moderate"
msgstr "Moderera"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "ett par sekunder sedan"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "för nån minut sedan"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "för %d minuter sedan"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "för en timma sedan"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "för %d timmar sedan"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "för en dag sedan"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "för %d dagar sedan"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "för en månad sedan"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "för %d månader sedan"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "för ett år sedan"
diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po
index eee6e39e4..85719532b 100644
--- a/locale/te/LC_MESSAGES/statusnet.po
+++ b/locale/te/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:55:04+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:16:03+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n"
@@ -190,7 +190,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం కనబడలేదà±."
@@ -810,7 +810,7 @@ msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించకà±"
msgid "Yes"
msgstr "à°…à°µà±à°¨à±"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±"
@@ -1561,7 +1561,7 @@ msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à
msgid "User is not a member of group."
msgstr "వాడà±à°•à°°à°¿ à°ˆ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°—à±à°‚పౠనà±à°‚à°¡à°¿ నిరోధించà±"
@@ -1661,19 +1661,19 @@ msgstr "à°ˆ à°—à±à°‚à°ªà±à°²à±‹ వాడà±à°•à°°à±à°²à± జాబితా
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "నిరోధించà±"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°—à±à°‚à°ªà±à°•à°¿ à°’à°• నిరà±à°µà°¾à°¹à°•à±à°¨à°¿à°—à°¾ చేయి"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°¨à±à°¨à°¿ చేయి"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరà±à°µà°¾à°¹à°•à±à°¨à±à°¨à°¿ చేయి"
@@ -2033,21 +2033,21 @@ msgstr ""
"మీ వాడà±à°•à°°à°¿à°ªà±‡à°°à± మరియౠసంకేతపదాలతో à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿. మీకౠఇంకా వాడà±à°•à°°à°¿à°ªà±‡à°°à± లేదా? కొతà±à°¤ ఖాతాని [నమోదà±à°šà±‡à°¸à±à°•à±‹à°‚à°¡à°¿]"
"(%%action.register%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à± మాతà±à°°à°®à±‡ మరొక వాడà±à°•à°°à°¿à°¨à°¿ నిరà±à°µà°¾à°¹à°•à±à°¨à°¿à°—à°¾ చేయగలరà±."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s ఇపà±à°ªà°Ÿà°¿à°•à±‡ \"%2$s\" à°—à±à°‚పౠయొకà±à°• à°’à°• నిరà±à°µà°¾à°•à±à°²à±."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "వాడà±à°•à°°à°¿ %sని %s à°—à±à°‚పౠనà±à°‚à°¡à°¿ తొలగించలేకపోయాం"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "%s ఇపà±à°ªà°Ÿà°¿à°•à±‡ \"%s\" à°—à±à°‚పౠయొకà±à°• à°’à°• నిరà±à°µà°¾à°•à±à°²à±."
@@ -2246,8 +2246,8 @@ msgstr "విషయ రకం "
msgid "Only "
msgstr "మాతà±à°°à°®à±‡ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4330,7 +4330,7 @@ msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొà
msgid "DB error inserting reply: %s"
msgstr ""
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -5924,47 +5924,47 @@ msgstr "సందేశం"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "కొనà±à°¨à°¿ à°•à±à°·à°£à°¾à°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "à°“ నిమిషం à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "%d నిమిషాల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "à°’à°• à°—à°‚à°Ÿ à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "%d à°—à°‚à°Ÿà°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "à°“ రోజౠకà±à°°à°¿à°¤à°‚"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "%d రోజà±à°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "à°“ నెల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "%d నెలల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "à°’à°• సంవతà±à°¸à°°à°‚ à°•à±à°°à°¿à°¤à°‚"
diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po
index c41e87f1b..5368680c6 100644
--- a/locale/tr/LC_MESSAGES/statusnet.po
+++ b/locale/tr/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:55:08+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:16:08+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n"
@@ -196,7 +196,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Onay kodu bulunamadı."
@@ -838,7 +838,7 @@ msgstr "Böyle bir kullanıcı yok."
msgid "Yes"
msgstr ""
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Böyle bir kullanıcı yok."
@@ -1628,7 +1628,7 @@ msgstr "Kullanıcının profili yok."
msgid "User is not a member of group."
msgstr "Bize o profili yollamadınız"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "Böyle bir kullanıcı yok."
@@ -1732,19 +1732,19 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2120,21 +2120,21 @@ msgstr ""
"duruyorsunuz, hemen bir [yeni hesap oluÅŸturun](%%action.register%%) ya da "
"[OpenID](%%action.openidlogin%%) ile giriş yapın."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Kullanıcının profili yok."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "OpenID formu yaratılamadı: %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Kullanıcının profili yok."
@@ -2333,8 +2333,8 @@ msgstr "BaÄŸlan"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4452,7 +4452,7 @@ msgstr "Durum mesajını kaydederken hata oluştu."
msgid "DB error inserting reply: %s"
msgstr "Cevap eklenirken veritabanı hatası: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -6067,47 +6067,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "birkaç saniye önce"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "yaklaşık bir dakika önce"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "yaklaşık %d dakika önce"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "yaklaşık bir saat önce"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "yaklaşık %d saat önce"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "yaklaşık bir gün önce"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "yaklaşık %d gün önce"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "yaklaşık bir ay önce"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "yaklaşık %d ay önce"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "yaklaşık bir yıl önce"
diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po
index 9f8e8b941..5f5fa846e 100644
--- a/locale/uk/LC_MESSAGES/statusnet.po
+++ b/locale/uk/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:55:11+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:16:16+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: out-statusnet\n"
@@ -198,7 +198,7 @@ msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s та друзів на %2$s!"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API метод не знайдено."
@@ -825,7 +825,7 @@ msgstr "Ðе блокувати цього кориÑтувача"
msgid "Yes"
msgstr "Так"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокувати кориÑтувача"
@@ -1581,7 +1581,7 @@ msgstr "КориÑтувача заблоковано в цій групі."
msgid "User is not a member of group."
msgstr "КориÑтувач не Ñ” учаÑником групи."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
msgid "Block user from group"
msgstr "Блокувати кориÑтувача в групі"
@@ -1683,19 +1683,19 @@ msgstr "СпиÑок учаÑників цієї групи."
msgid "Admin"
msgstr "Ðдмін"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "Блок"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr "Ðадати кориÑтувачеві права адмініÑтратора"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr "Зробити адміном"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr "Ðадати цьому кориÑтувачеві права адмініÑтратора"
@@ -2106,22 +2106,22 @@ msgstr ""
"Увійти викриÑтовуючи Ñ–Ð¼â€™Ñ Ñ‚Ð° пароль. Ще не маєте імені кориÑтувача? "
"[ЗареєÑтрувати](%%action.register%%) новий акаунт."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Лише кориÑтувач з правами адмініÑтратора може призначити інших адмінів групи."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s вже є адміном у групі «%2$s»."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ðе можна отримати Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ %1$s щодо членÑтва у групі %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ðе можна надати %1$s права адміна в групі %2$s."
@@ -2323,8 +2323,8 @@ msgstr "тип зміÑту "
msgid "Only "
msgstr "Лише "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Такий формат даних не підтримуєтьÑÑ."
@@ -4490,7 +4490,7 @@ msgstr "Проблема при збереженні вхідних допиÑÑ–
msgid "DB error inserting reply: %s"
msgstr "Помилка бази даних при додаванні відповіді: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -6159,47 +6159,47 @@ msgstr "ПовідомленнÑ"
msgid "Moderate"
msgstr "Модерувати"
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "мить тому"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "хвилину тому"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "близько %d хвилин тому"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "годину тому"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "близько %d годин тому"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "день тому"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "близько %d днів тому"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "міÑÑць тому"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "близько %d міÑÑців тому"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "рік тому"
diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po
index 696587e5f..cf152eff5 100644
--- a/locale/vi/LC_MESSAGES/statusnet.po
+++ b/locale/vi/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:55:14+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:16:19+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n"
@@ -195,7 +195,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Phương thức API không tìm thấy!"
@@ -843,7 +843,7 @@ msgstr "Bá» chặn ngÆ°á»i dùng này"
msgid "Yes"
msgstr "Có"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Ban user"
@@ -1668,7 +1668,7 @@ msgstr "NgÆ°á»i dùng không có thông tin."
msgid "User is not a member of group."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "Ban user"
@@ -1775,20 +1775,20 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
#, fuzzy
msgid "Make user an admin of the group"
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
#, fuzzy
msgid "Make this user an admin"
msgstr "Kênh mà bạn tham gia"
@@ -2200,21 +2200,21 @@ msgstr ""
"khoản, [hãy đăng ký](%%action.register%%) tài khoản mới, hoặc thử đăng nhập "
"bằng [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "NgÆ°á»i dùng không có thông tin."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
@@ -2422,8 +2422,8 @@ msgstr "Kết nối"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "Không hỗ trợ định dạng dữ liệu này."
@@ -4604,7 +4604,7 @@ msgstr "Có lỗi xảy ra khi lưu tin nhắn."
msgid "DB error inserting reply: %s"
msgstr "Lá»—i cÆ¡ sở dữ liệu khi chèn trả lá»i: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%s (%s)"
@@ -6309,47 +6309,47 @@ msgstr "Tin mới nhất"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "vài giây trước"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "1 phút trước"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "%d phút trước"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "1 giá» trÆ°á»›c"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "%d giá» trÆ°á»›c"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "1 ngày trước"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "%d ngày trước"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "1 tháng trước"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "%d tháng trước"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "1 năm trước"
diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po
index f643a788d..a7aeec7ca 100644
--- a/locale/zh_CN/LC_MESSAGES/statusnet.po
+++ b/locale/zh_CN/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:55:17+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:16:22+0000\n"
"Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n"
@@ -197,7 +197,7 @@ msgstr "æ¥è‡ª%2$s 上 %1$s 和好å‹çš„æ›´æ–°ï¼"
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 方法未实现ï¼"
@@ -837,7 +837,7 @@ msgstr "å–消阻止次用户"
msgid "Yes"
msgstr "是"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "阻止该用户"
@@ -1646,7 +1646,7 @@ msgstr "用户没有个人信æ¯ã€‚"
msgid "User is not a member of group."
msgstr "您未告知此个人信æ¯"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "阻止用户"
@@ -1752,21 +1752,21 @@ msgstr "该组æˆå‘˜åˆ—表。"
msgid "Admin"
msgstr "admin管ç†å‘˜"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr "阻止"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
#, fuzzy
msgid "Make user an admin of the group"
msgstr "åªæœ‰adminæ‰èƒ½ç¼–辑这个组"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
#, fuzzy
msgid "Make Admin"
msgstr "admin管ç†å‘˜"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2155,21 +2155,21 @@ msgstr ""
"请使用你的å¸å·å’Œå¯†ç ç™»å…¥ã€‚没有å¸å·ï¼Ÿ[注册](%%action.register%%) 一个新å¸å·, "
"或使用 [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "用户没有个人信æ¯ã€‚"
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "无法订阅用户:未找到。"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "åªæœ‰adminæ‰èƒ½ç¼–辑这个组"
@@ -2372,8 +2372,8 @@ msgstr "连接"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr "ä¸æ”¯æŒçš„æ•°æ®æ ¼å¼ã€‚"
@@ -4530,7 +4530,7 @@ msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
msgid "DB error inserting reply: %s"
msgstr "添加回å¤æ—¶æ•°æ®åº“出错:%s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -6174,47 +6174,47 @@ msgstr "新消æ¯"
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr "几秒å‰"
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr "一分钟å‰"
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr "%d 分钟å‰"
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr "一å°æ—¶å‰"
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr "%d å°æ—¶å‰"
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr "一天å‰"
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr "%d 天å‰"
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr "一个月å‰"
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr "%d 个月å‰"
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr "一年å‰"
diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po
index 6a384eac1..815f95eac 100644
--- a/locale/zh_TW/LC_MESSAGES/statusnet.po
+++ b/locale/zh_TW/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 23:53+0000\n"
-"PO-Revision-Date: 2010-02-05 23:55:19+0000\n"
+"POT-Creation-Date: 2010-02-11 08:14+0000\n"
+"PO-Revision-Date: 2010-02-11 08:16:25+0000\n"
"Language-Team: Traditional Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62048); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n"
@@ -193,7 +193,7 @@ msgstr ""
#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "確èªç¢¼éºå¤±"
@@ -828,7 +828,7 @@ msgstr "無此使用者"
msgid "Yes"
msgstr ""
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "無此使用者"
@@ -1612,7 +1612,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
#, fuzzy
msgid "Block user from group"
msgstr "無此使用者"
@@ -1714,19 +1714,19 @@ msgstr ""
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:348 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:443
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:475
msgid "Make this user an admin"
msgstr ""
@@ -2082,21 +2082,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "無法從 %s 建立OpenID"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "無法從 %s 建立OpenID"
@@ -2292,8 +2292,8 @@ msgstr "連çµ"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1039
-#: lib/api.php:1067 lib/api.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
+#: lib/api.php:1068 lib/api.php:1178
msgid "Not a supported data format."
msgstr ""
@@ -4374,7 +4374,7 @@ msgstr "儲存使用者發生錯誤"
msgid "DB error inserting reply: %s"
msgstr "增加回覆時,資料庫發生錯誤: %s"
-#: classes/Notice.php:1231
+#: classes/Notice.php:1235
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -5962,47 +5962,47 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:867
+#: lib/util.php:870
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:869
+#: lib/util.php:872
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:871
+#: lib/util.php:874
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:873
+#: lib/util.php:876
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:875
+#: lib/util.php:878
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:880
msgid "about a day ago"
msgstr ""
-#: lib/util.php:879
+#: lib/util.php:882
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:884
msgid "about a month ago"
msgstr ""
-#: lib/util.php:883
+#: lib/util.php:886
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:888
msgid "about a year ago"
msgstr ""
diff --git a/plugins/FeedSub/FeedSubPlugin.php b/plugins/FeedSub/FeedSubPlugin.php
deleted file mode 100644
index e49e2a648..000000000
--- a/plugins/FeedSub/FeedSubPlugin.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/*
-StatusNet Plugin: 0.9
-Plugin Name: FeedSub
-Plugin URI: http://status.net/wiki/Feed_subscription
-Description: FeedSub allows subscribing to real-time updates from external feeds supporting PubHubSubbub protocol.
-Version: 0.1
-Author: Brion Vibber <brion@status.net>
-Author URI: http://status.net/
-*/
-
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package FeedSubPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-define('FEEDSUB_SERVICE', 100); // fixme -- avoid hardcoding these?
-
-// We bundle the XML_Parse_Feed library...
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib');
-
-class FeedSubException extends Exception
-{
-}
-
-class FeedSubPlugin extends Plugin
-{
- /**
- * Hook for RouterInitialized event.
- *
- * @param Net_URL_Mapper $m path-to-action mapper
- * @return boolean hook return
- */
- function onRouterInitialized($m)
- {
- $m->connect('feedsub/callback/:feed',
- array('action' => 'feedsubcallback'),
- array('feed' => '[0-9]+'));
- $m->connect('settings/feedsub',
- array('action' => 'feedsubsettings'));
- return true;
- }
-
- /**
- * Add the feed settings page to the Connect Settings menu
- *
- * @param Action &$action The calling page
- *
- * @return boolean hook return
- */
- function onEndConnectSettingsNav(&$action)
- {
- $action_name = $action->trimmed('action');
-
- $action->menuItem(common_local_url('feedsubsettings'),
- _m('Feeds'),
- _m('Feed subscription options'),
- $action_name === 'feedsubsettings');
-
- return true;
- }
-
- /**
- * Automatically load the actions and libraries used by the plugin
- *
- * @param Class $cls the class
- *
- * @return boolean hook return
- *
- */
- function onAutoload($cls)
- {
- $base = dirname(__FILE__);
- $lower = strtolower($cls);
- $files = array("$base/$lower.php");
- if (substr($lower, -6) == 'action') {
- $files[] = "$base/actions/" . substr($lower, 0, -6) . ".php";
- }
- foreach ($files as $file) {
- if (file_exists($file)) {
- include_once $file;
- return false;
- }
- }
- return true;
- }
-
- function onCheckSchema() {
- // warning: the autoincrement doesn't seem to set.
- // alter table feedinfo change column id id int(11) not null auto_increment;
- $schema = Schema::get();
- $schema->ensureTable('feedinfo', Feedinfo::schemaDef());
- return true;
- }
-}
diff --git a/plugins/FeedSub/feedinfo.php b/plugins/FeedSub/feedinfo.php
deleted file mode 100644
index b166bd6e1..000000000
--- a/plugins/FeedSub/feedinfo.php
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-/*
-
-Subscription flow:
-
- $feedinfo->subscribe()
- generate random verification token
- save to verify_token
- sends a sub request to the hub...
-
- feedsub/callback
- hub sends confirmation back to us via GET
- We verify the request, then echo back the challenge.
- On our end, we save the time we subscribed and the lease expiration
-
- feedsub/callback
- hub sends us updates via POST
- ?
-
-*/
-
-class FeedDBException extends FeedSubException
-{
- public $obj;
-
- function __construct($obj)
- {
- parent::__construct('Database insert failure');
- $this->obj = $obj;
- }
-}
-
-class Feedinfo extends Memcached_DataObject
-{
- public $__table = 'feedinfo';
-
- public $id;
- public $profile_id;
-
- public $feeduri;
- public $homeuri;
- public $huburi;
-
- // PuSH subscription data
- public $verify_token;
- public $sub_start;
- public $sub_end;
-
- public $created;
- public $lastupdate;
-
-
- public /*static*/ function staticGet($k, $v=null)
- {
- return parent::staticGet(__CLASS__, $k, $v);
- }
-
- /**
- * return table definition for DB_DataObject
- *
- * DB_DataObject needs to know something about the table to manipulate
- * instances. This method provides all the DB_DataObject needs to know.
- *
- * @return array array of column definitions
- */
-
- function table()
- {
- return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
- 'profile_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
- 'feeduri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'homeuri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'huburi' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'verify_token' => DB_DATAOBJECT_STR,
- 'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
- 'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
- 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
- 'lastupdate' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
- }
-
- static function schemaDef()
- {
- return array(new ColumnDef('id', 'integer',
- /*size*/ null,
- /*nullable*/ false,
- /*key*/ 'PRI',
- /*default*/ '0',
- /*extra*/ null,
- /*auto_increment*/ true),
- new ColumnDef('profile_id', 'integer',
- null, false),
- new ColumnDef('feeduri', 'varchar',
- 255, false, 'UNI'),
- new ColumnDef('homeuri', 'varchar',
- 255, false),
- new ColumnDef('huburi', 'varchar',
- 255, false),
- new ColumnDef('verify_token', 'varchar',
- 32, true),
- new ColumnDef('sub_start', 'datetime',
- null, true),
- new ColumnDef('sub_end', 'datetime',
- null, true),
- new ColumnDef('created', 'datetime',
- null, false),
- new ColumnDef('lastupdate', 'datetime',
- null, false));
- }
-
- /**
- * return key definitions for DB_DataObject
- *
- * DB_DataObject needs to know about keys that the table has; this function
- * defines them.
- *
- * @return array key definitions
- */
-
- function keys()
- {
- return array('id' => 'P'); //?
- }
-
- /**
- * return key definitions for Memcached_DataObject
- *
- * Our caching system uses the same key definitions, but uses a different
- * method to get them.
- *
- * @return array key definitions
- */
-
- function keyTypes()
- {
- return $this->keys();
- }
-
- /**
- * Fetch the StatusNet-side profile for this feed
- * @return Profile
- */
- public function getProfile()
- {
- return Profile::staticGet('id', $this->profile_id);
- }
-
- /**
- * @param FeedMunger $munger
- * @return Feedinfo
- */
- public static function ensureProfile($munger)
- {
- $feedinfo = $munger->feedinfo();
-
- $current = self::staticGet('feeduri', $feedinfo->feeduri);
- if ($current) {
- // @fixme we should probably update info as necessary
- return $current;
- }
-
- $feedinfo->query('BEGIN');
-
- try {
- $profile = $munger->profile();
- $result = $profile->insert();
- if (empty($result)) {
- throw new FeedDBException($profile);
- }
-
- $feedinfo->profile_id = $profile->id;
- $result = $feedinfo->insert();
- if (empty($result)) {
- throw new FeedDBException($feedinfo);
- }
-
- $feedinfo->query('COMMIT');
- } catch (FeedDBException $e) {
- common_log_db_error($e->obj, 'INSERT', __FILE__);
- $feedinfo->query('ROLLBACK');
- return false;
- }
- return $feedinfo;
- }
-
- /**
- * Send a subscription request to the hub for this feed.
- * The hub will later send us a confirmation POST to /feedsub/callback.
- *
- * @return bool true on success, false on failure
- */
- public function subscribe()
- {
- // @fixme use the verification token
- #$token = md5(mt_rand() . ':' . $this->feeduri);
- #$this->verify_token = $token;
- #$this->update(); // @fixme
-
- try {
- $callback = common_local_url('feedsubcallback', array('feed' => $this->id));
- $headers = array('Content-Type: application/x-www-form-urlencoded');
- $post = array('hub.mode' => 'subscribe',
- 'hub.callback' => $callback,
- 'hub.verify' => 'async',
- //'hub.verify_token' => $token,
- //'hub.lease_seconds' => 0,
- 'hub.topic' => $this->feeduri);
- $client = new HTTPClient();
- $response = $client->post($this->huburi, $headers, $post);
- if ($response->getStatus() >= 200 && $response->getStatus() < 300) {
- common_log(LOG_INFO, __METHOD__ . ': sub req ok');
- return true;
- } else {
- common_log(LOG_INFO, __METHOD__ . ': sub req failed');
- return false;
- }
- } catch (Exception $e) {
- // wtf!
- common_log(LOG_ERR, __METHOD__ . ": error \"{$e->getMessage()}\" hitting hub $this->huburi subscribing to $this->feeduri");
- return false;
- }
- }
-
- /**
- * Read and post notices for updates from the feed.
- * Currently assumes that all items in the feed are new,
- * coming from a PuSH hub.
- *
- * @param string $xml source of Atom or RSS feed
- */
- public function postUpdates($xml)
- {
- common_log(LOG_INFO, __METHOD__ . ": packet for \"$this->feeduri\"! $xml");
- require_once "XML/Feed/Parser.php";
- $feed = new XML_Feed_Parser($xml, false, false, true);
- $munger = new FeedMunger($feed);
-
- $hits = 0;
- foreach ($feed as $index => $entry) {
- // @fixme this might sort in wrong order if we get multiple updates
-
- $notice = $munger->notice($index);
- $notice->profile_id = $this->profile_id;
-
- // Double-check for oldies
- // @fixme this could explode horribly for multiple feeds on a blog. sigh
- $dupe = new Notice();
- $dupe->uri = $notice->uri;
- $dupe->find();
- if ($dupe->fetch()) {
- common_log(LOG_WARNING, __METHOD__ . ": tried to save dupe notice for entry {$notice->uri} of feed {$this->feeduri}");
- continue;
- }
-
- if (Event::handle('StartNoticeSave', array(&$notice))) {
- $id = $notice->insert();
- Event::handle('EndNoticeSave', array($notice));
- }
- $notice->addToInboxes();
-
- common_log(LOG_INFO, __METHOD__ . ": saved notice {$notice->id} for entry $index of update to \"{$this->feeduri}\"");
- $hits++;
- }
- if ($hits == 0) {
- common_log(LOG_INFO, __METHOD__ . ": no updates in packet for \"$this->feeduri\"! $xml");
- }
- }
-}
diff --git a/plugins/FeedSub/feedinfo.sql b/plugins/FeedSub/feedinfo.sql
deleted file mode 100644
index e9b53d26e..000000000
--- a/plugins/FeedSub/feedinfo.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-CREATE TABLE `feedinfo` (
- `id` int(11) NOT NULL auto_increment,
- `profile_id` int(11) NOT NULL,
- `feeduri` varchar(255) NOT NULL,
- `homeuri` varchar(255) NOT NULL,
- `huburi` varchar(255) NOT NULL,
- `verify_token` varchar(32) default NULL,
- `sub_start` datetime default NULL,
- `sub_end` datetime default NULL,
- `created` datetime NOT NULL,
- `lastupdate` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `feedinfo_feeduri_idx` (`feeduri`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
diff --git a/plugins/MemcachePlugin.php b/plugins/MemcachePlugin.php
index 2bc4b892b..c5e74fb41 100644
--- a/plugins/MemcachePlugin.php
+++ b/plugins/MemcachePlugin.php
@@ -102,7 +102,7 @@ class MemcachePlugin extends Plugin
*
* @param string &$key in; Key to use for lookups
* @param mixed &$value in; Value to associate
- * @param integer &$flag in; Flag (passed through to Memcache)
+ * @param integer &$flag in; Flag empty or Cache::COMPRESSED
* @param integer &$expiry in; Expiry (passed through to Memcache)
* @param boolean &$success out; Whether the set was successful
*
@@ -115,7 +115,7 @@ class MemcachePlugin extends Plugin
if ($expiry === null) {
$expiry = $this->defaultExpiry;
}
- $success = $this->_conn->set($key, $value, $flag, $expiry);
+ $success = $this->_conn->set($key, $value, $this->flag(intval($flag)), $expiry);
Event::handle('EndCacheSet', array($key, $value, $flag,
$expiry));
return false;
@@ -197,6 +197,20 @@ class MemcachePlugin extends Plugin
}
}
+ /**
+ * Translate general flags to Memcached-specific flags
+ * @param int $flag
+ * @return int
+ */
+ protected function flag($flag)
+ {
+ $out = 0;
+ if ($flag & Cache::COMPRESSED == Cache::COMPRESSED) {
+ $out |= MEMCACHE_COMPRESSED;
+ }
+ return $out;
+ }
+
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'Memcache',
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
new file mode 100644
index 000000000..8444c3d73
--- /dev/null
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -0,0 +1,276 @@
+<?php
+/*
+StatusNet Plugin: 0.9
+Plugin Name: FeedSub
+Plugin URI: http://status.net/wiki/Feed_subscription
+Description: FeedSub allows subscribing to real-time updates from external feeds supporting PubHubSubbub protocol.
+Version: 0.1
+Author: Brion Vibber <brion@status.net>
+Author URI: http://status.net/
+*/
+
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package FeedSubPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+define('FEEDSUB_SERVICE', 100); // fixme -- avoid hardcoding these?
+
+// We bundle the XML_Parse_Feed library...
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib');
+
+class FeedSubException extends Exception
+{
+}
+
+class OStatusPlugin extends Plugin
+{
+ /**
+ * Hook for RouterInitialized event.
+ *
+ * @param Net_URL_Mapper $m path-to-action mapper
+ * @return boolean hook return
+ */
+ function onRouterInitialized($m)
+ {
+ // Discovery actions
+ $m->connect('.well-known/host-meta',
+ array('action' => 'hostmeta'));
+ $m->connect('main/webfinger',
+ array('action' => 'webfinger'));
+ $m->connect('main/ostatus',
+ array('action' => 'ostatusinit'));
+ $m->connect('main/ostatus?nickname=:nickname',
+ array('action' => 'ostatusinit'), array('nickname' => '[A-Za-z0-9_-]+'));
+ $m->connect('main/ostatussub',
+ array('action' => 'ostatussub'));
+ $m->connect('main/ostatussub',
+ array('action' => 'ostatussub'), array('feed' => '[A-Za-z0-9\.\/\:]+'));
+
+ // PuSH actions
+ $m->connect('main/push/hub', array('action' => 'pushhub'));
+
+ $m->connect('main/push/callback/:feed',
+ array('action' => 'pushcallback'),
+ array('feed' => '[0-9]+'));
+ $m->connect('settings/feedsub',
+ array('action' => 'feedsubsettings'));
+
+ // Salmon endpoint
+ $m->connect('main/salmon/user/:id',
+ array('action' => 'salmon'),
+ array('id' => '[0-9]+'));
+ $m->connect('main/salmon/group/:id',
+ array('action' => 'salmongroup'),
+ array('id' => '[0-9]+'));
+ return true;
+ }
+
+ /**
+ * Set up queue handlers for outgoing hub pushes
+ * @param QueueManager $qm
+ * @return boolean hook return
+ */
+ function onEndInitializeQueueManager(QueueManager $qm)
+ {
+ $qm->connect('hubverify', 'HubVerifyQueueHandler');
+ $qm->connect('hubdistrib', 'HubDistribQueueHandler');
+ $qm->connect('hubout', 'HubOutQueueHandler');
+ return true;
+ }
+
+ /**
+ * Put saved notices into the queue for pubsub distribution.
+ */
+ function onStartEnqueueNotice($notice, &$transports)
+ {
+ $transports[] = 'hubdistrib';
+ return true;
+ }
+
+ /**
+ * Set up a PuSH hub link to our internal link for canonical timeline
+ * Atom feeds for users and groups.
+ */
+ function onStartApiAtom(Action $action)
+ {
+ if ($action instanceof ApiTimelineUserAction) {
+ $salmonAction = 'salmon';
+ } else if ($action instanceof ApiTimelineGroupAction) {
+ $salmonAction = 'salmongroup';
+ } else {
+ return;
+ }
+
+ $id = $action->arg('id');
+ if (strval(intval($id)) === strval($id)) {
+ // Canonical form of id in URL? These are used for OStatus syndication.
+
+ $hub = common_config('ostatus', 'hub');
+ if (empty($hub)) {
+ // Updates will be handled through our internal PuSH hub.
+ $hub = common_local_url('pushhub');
+ }
+ $action->element('link', array('rel' => 'hub',
+ 'href' => $hub));
+
+ // Also, we'll add in the salmon link
+ $salmon = common_local_url($salmonAction, array('id' => $id));
+ $action->element('link', array('rel' => 'salmon',
+ 'href' => $salmon));
+ }
+ }
+
+ /**
+ * Add the feed settings page to the Connect Settings menu
+ *
+ * @param Action &$action The calling page
+ *
+ * @return boolean hook return
+ */
+ function onEndConnectSettingsNav(&$action)
+ {
+ $action_name = $action->trimmed('action');
+
+ $action->menuItem(common_local_url('feedsubsettings'),
+ _m('Feeds'),
+ _m('Feed subscription options'),
+ $action_name === 'feedsubsettings');
+
+ return true;
+ }
+
+ /**
+ * Automatically load the actions and libraries used by the plugin
+ *
+ * @param Class $cls the class
+ *
+ * @return boolean hook return
+ *
+ */
+ function onAutoload($cls)
+ {
+ $base = dirname(__FILE__);
+ $lower = strtolower($cls);
+ $files = array("$base/classes/$cls.php",
+ "$base/lib/$lower.php");
+ if (substr($lower, -6) == 'action') {
+ $files[] = "$base/actions/" . substr($lower, 0, -6) . ".php";
+ }
+ foreach ($files as $file) {
+ if (file_exists($file)) {
+ include_once $file;
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Add in an OStatus subscribe button
+ */
+ function onStartProfilePageActionsElements($output, $profile)
+ {
+ $cur = common_current_user();
+
+ if (empty($cur)) {
+ // Add an OStatus subscribe
+ $output->elementStart('li', 'entity_subscribe');
+ $url = common_local_url('ostatusinit',
+ array('nickname' => $profile->nickname));
+ $output->element('a', array('href' => $url,
+ 'class' => 'entity_remote_subscribe'),
+ _m('OStatus'));
+
+ $output->elementEnd('li');
+ }
+ }
+
+ /**
+ * Check if we've got remote replies to send via Salmon.
+ *
+ * @fixme push webfinger lookup & sending to a background queue
+ * @fixme also detect short-form name for remote subscribees where not ambiguous
+ */
+ function onEndNoticeSave($notice)
+ {
+ $count = preg_match_all('/(\w+\.)*\w+@(\w+\.)*\w+(\w+\-\w+)*\.\w+/', $notice->content, $matches);
+ if ($count) {
+ foreach ($matches[0] as $webfinger) {
+ // Check to see if we've got an actual webfinger
+ $w = new Webfinger;
+
+ $endpoint_uri = '';
+
+ $result = $w->lookup($webfinger);
+ if (empty($result)) {
+ continue;
+ }
+
+ foreach ($result->links as $link) {
+ if ($link['rel'] == 'salmon') {
+ $endpoint_uri = $link['href'];
+ }
+ }
+
+ if (empty($endpoint_uri)) {
+ continue;
+ }
+
+ $xml = '<?xml version="1.0" encoding="UTF-8" ?>';
+ $xml .= $notice->asAtomEntry();
+
+ $salmon = new Salmon();
+ $salmon->post($endpoint_uri, $xml);
+ }
+ }
+ }
+
+ /**
+ * Garbage collect unused feeds on unsubscribe
+ */
+ function onEndUnsubscribe($user, $other)
+ {
+ $profile = Ostatus_profile::staticGet('profile_id', $other->id);
+ if ($feed) {
+ $sub = new Subscription();
+ $sub->subscribed = $other->id;
+ $sub->limit(1);
+ if (!$sub->find(true)) {
+ common_log(LOG_INFO, "Unsubscribing from now-unused feed $feed->feeduri on hub $feed->huburi");
+ $profile->unsubscribe();
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Make sure necessary tables are filled out.
+ */
+ function onCheckSchema() {
+ $schema = Schema::get();
+ $schema->ensureTable('ostatus_profile', Ostatus_profile::schemaDef());
+ $schema->ensureTable('hubsub', HubSub::schemaDef());
+ return true;
+ }
+}
diff --git a/plugins/FeedSub/README b/plugins/OStatus/README
index cbf3adbb9..cbf3adbb9 100644
--- a/plugins/FeedSub/README
+++ b/plugins/OStatus/README
diff --git a/plugins/FeedSub/actions/feedsubsettings.php b/plugins/OStatus/actions/feedsubsettings.php
index 0fba20a39..6933c9bf2 100644
--- a/plugins/FeedSub/actions/feedsubsettings.php
+++ b/plugins/OStatus/actions/feedsubsettings.php
@@ -182,9 +182,9 @@ class FeedSubSettingsAction extends ConnectSettingsAction
}
$this->munger = $discover->feedMunger();
- $this->feedinfo = $this->munger->feedInfo();
+ $this->profile = $this->munger->ostatusProfile();
- if ($this->feedinfo->huburi == '') {
+ if ($this->profile->huburi == '' && !common_config('feedsub', 'nohub')) {
$this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
return false;
}
@@ -196,30 +196,44 @@ class FeedSubSettingsAction extends ConnectSettingsAction
{
if ($this->validateFeed()) {
$this->preview = true;
- $this->feedinfo = Feedinfo::ensureProfile($this->munger);
+ $this->profile = Ostatus_profile::ensureProfile($this->munger);
+ if (!$this->profile) {
+ throw new ServerException("Feed profile was not saved properly.");
+ }
// If not already in use, subscribe to updates via the hub
- if ($this->feedinfo->sub_start) {
- common_log(LOG_INFO, __METHOD__ . ": double the fun! new sub for {$this->feedinfo->feeduri} last subbed {$this->feedinfo->sub_start}");
+ if ($this->profile->sub_start) {
+ common_log(LOG_INFO, __METHOD__ . ": double the fun! new sub for {$this->profile->feeduri} last subbed {$this->profile->sub_start}");
} else {
- $ok = $this->feedinfo->subscribe();
+ $ok = $this->profile->subscribe();
common_log(LOG_INFO, __METHOD__ . ": sub was $ok");
if (!$ok) {
$this->showForm(_m('Feed subscription failed! Bad response from hub.'));
return;
}
}
-
+
// And subscribe the current user to the local profile
$user = common_current_user();
- $profile = $this->feedinfo->getProfile();
-
- if ($user->isSubscribed($profile)) {
- $this->showForm(_m('Already subscribed!'));
- } elseif ($user->subscribeTo($profile)) {
- $this->showForm(_m('Feed subscribed!'));
+
+ if ($this->profile->isGroup()) {
+ $group = $this->profile->localGroup();
+ if ($user->isMember($group)) {
+ $this->showForm(_m('Already a member!'));
+ } elseif (Group_member::join($this->profile->group_id, $user->id)) {
+ $this->showForm(_m('Joined remote group!'));
+ } else {
+ $this->showForm(_m('Remote group join failed!'));
+ }
} else {
- $this->showForm(_m('Feed subscription failed!'));
+ $local = $this->profile->localProfile();
+ if ($user->isSubscribed($local)) {
+ $this->showForm(_m('Already subscribed!'));
+ } elseif ($user->subscribeTo($local)) {
+ $this->showForm(_m('Feed subscribed!'));
+ } else {
+ $this->showForm(_m('Feed subscription failed!'));
+ }
}
}
}
@@ -234,7 +248,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
function previewFeed()
{
- $feedinfo = $this->munger->feedinfo();
+ $profile = $this->munger->ostatusProfile();
$notice = $this->munger->notice(0, true); // preview
if ($notice) {
diff --git a/plugins/OStatus/actions/hostmeta.php b/plugins/OStatus/actions/hostmeta.php
new file mode 100644
index 000000000..850b8a0fe
--- /dev/null
+++ b/plugins/OStatus/actions/hostmeta.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class HostMetaAction extends Action
+{
+
+ function handle()
+ {
+ parent::handle();
+
+ $w = new Webfinger();
+
+
+ $domain = common_config('site', 'server');
+ $url = common_local_url('webfinger');
+ $url.= '?uri={uri}';
+ print $w->getHostMeta($domain, $url);
+ }
+}
diff --git a/plugins/OStatus/actions/ostatusinit.php b/plugins/OStatus/actions/ostatusinit.php
new file mode 100644
index 000000000..bac2c4d43
--- /dev/null
+++ b/plugins/OStatus/actions/ostatusinit.php
@@ -0,0 +1,128 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+
+class OStatusInitAction extends Action
+{
+
+ var $nickname;
+ var $acct;
+ var $err;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ if (common_logged_in()) {
+ $this->clientError(_('You can use the local subscription!'));
+ return false;
+ }
+
+ $this->nickname = $this->trimmed('nickname');
+ $this->acct = $this->trimmed('acct');
+
+ return true;
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ /* Use a session token for CSRF protection. */
+ $token = $this->trimmed('token');
+ if (!$token || $token != common_session_token()) {
+ $this->showForm(_('There was a problem with your session token. '.
+ 'Try again, please.'));
+ return;
+ }
+ $this->ostatusConnect();
+ } else {
+ $this->showForm();
+ }
+ }
+
+ function showForm($err = null)
+ {
+ $this->err = $err;
+ $this->showPage();
+
+ }
+
+ function showContent()
+ {
+ $this->elementStart('form', array('id' => 'form_ostatus_connect',
+ 'method' => 'post',
+ 'class' => 'form_settings',
+ 'action' => common_local_url('ostatusinit')));
+ $this->elementStart('fieldset');
+ $this->element('legend', _('Subscribe to a remote user'));
+ $this->hidden('token', common_session_token());
+
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ $this->input('nickname', _('User nickname'), $this->nickname,
+ _('Nickname of the user you want to follow'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->input('acct', _('Profile Account'), $this->acct,
+ _('Your account id (i.e. user@identi.ca)'));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ $this->submit('submit', _('Subscribe'));
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ }
+
+ function ostatusConnect()
+ {
+ $w = new Webfinger;
+
+ $result = $w->lookup($this->acct);
+ foreach ($result->links as $link) {
+ if ($link['rel'] == 'http://ostatus.org/schema/1.0/subscribe') {
+ // We found a URL - let's redirect!
+
+ $user = User::staticGet('nickname', $this->nickname);
+
+ $feed_url = common_local_url('ApiTimelineUser',
+ array('id' => $user->id,
+ 'format' => 'atom'));
+ $url = $w->applyTemplate($link['template'], $feed_url);
+
+ common_redirect($url, 303);
+ }
+
+ }
+
+ }
+
+ function title()
+ {
+ return _('OStatus Connect');
+ }
+
+} \ No newline at end of file
diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
new file mode 100644
index 000000000..9774286fd
--- /dev/null
+++ b/plugins/OStatus/actions/ostatussub.php
@@ -0,0 +1,226 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class OStatusSubAction extends Action
+{
+
+ protected $feedurl;
+
+ function title()
+ {
+ return _m("OStatus Subscribe");
+ }
+
+ function handle($args)
+ {
+ if ($this->validateFeed()) {
+ $this->showForm();
+ }
+
+ return true;
+
+ }
+
+ function showForm($err = null)
+ {
+ $this->err = $err;
+ $this->showPage();
+ }
+
+
+ function showContent()
+ {
+ $user = common_current_user();
+
+ $profile = $user->getProfile();
+
+ $fuser = null;
+
+ $flink = Foreign_link::getByUserID($user->id, FEEDSUB_SERVICE);
+
+ if (!empty($flink)) {
+ $fuser = $flink->getForeignUser();
+ }
+
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_settings_feedsub',
+ 'class' => 'form_settings',
+ 'action' =>
+ common_local_url('feedsubsettings')));
+
+ $this->hidden('token', common_session_token());
+
+ $this->elementStart('fieldset', array('id' => 'settings_feeds'));
+
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li', array('id' => 'settings_twitter_login_button'));
+ $this->input('feedurl', _('Feed URL'), $this->feedurl, _('Enter the URL of a PubSubHubbub-enabled feed'));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+
+ $this->submit('subscribe', _m('Subscribe'));
+
+ $this->elementEnd('fieldset');
+
+ $this->elementEnd('form');
+
+ $this->previewFeed();
+ }
+
+ /**
+ * Handle posts to this form
+ *
+ * Based on the button that was pressed, muxes out to other functions
+ * to do the actual task requested.
+ *
+ * All sub-functions reload the form with a message -- success or failure.
+ *
+ * @return void
+ */
+
+ function handlePost()
+ {
+ // CSRF protection
+ $token = $this->trimmed('token');
+ if (!$token || $token != common_session_token()) {
+ $this->showForm(_('There was a problem with your session token. '.
+ 'Try again, please.'));
+ return;
+ }
+
+ if ($this->arg('subscribe')) {
+ $this->saveFeed();
+ } else {
+ $this->showForm(_('Unexpected form submission.'));
+ }
+ }
+
+
+ /**
+ * Set up and add a feed
+ *
+ * @return boolean true if feed successfully read
+ * Sends you back to input form if not.
+ */
+ function validateFeed()
+ {
+ $feedurl = $this->trimmed('feed');
+
+ if ($feedurl == '') {
+ $this->showForm(_m('Empty feed URL!'));
+ return;
+ }
+ $this->feedurl = $feedurl;
+
+ // Get the canonical feed URI and check it
+ try {
+ $discover = new FeedDiscovery();
+ $uri = $discover->discoverFromURL($feedurl);
+ } catch (FeedSubBadURLException $e) {
+ $this->showForm(_m('Invalid URL or could not reach server.'));
+ return false;
+ } catch (FeedSubBadResponseException $e) {
+ $this->showForm(_m('Cannot read feed; server returned error.'));
+ return false;
+ } catch (FeedSubEmptyException $e) {
+ $this->showForm(_m('Cannot read feed; server returned an empty page.'));
+ return false;
+ } catch (FeedSubBadHTMLException $e) {
+ $this->showForm(_m('Bad HTML, could not find feed link.'));
+ return false;
+ } catch (FeedSubNoFeedException $e) {
+ $this->showForm(_m('Could not find a feed linked from this URL.'));
+ return false;
+ } catch (FeedSubUnrecognizedTypeException $e) {
+ $this->showForm(_m('Not a recognized feed type.'));
+ return false;
+ } catch (FeedSubException $e) {
+ // Any new ones we forgot about
+ $this->showForm(_m('Bad feed URL.'));
+ return false;
+ }
+
+ $this->munger = $discover->feedMunger();
+ $this->profile = $this->munger->ostatusProfile();
+
+ if ($this->profile->huburi == '') {
+ $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
+ return false;
+ }
+
+ return true;
+ }
+
+ function saveFeed()
+ {
+ if ($this->validateFeed()) {
+ $this->preview = true;
+ $this->profile = Ostatus_profile::ensureProfile($this->munger);
+
+ // If not already in use, subscribe to updates via the hub
+ if ($this->profile->sub_start) {
+ common_log(LOG_INFO, __METHOD__ . ": double the fun! new sub for {$this->profile->feeduri} last subbed {$this->profile->sub_start}");
+ } else {
+ $ok = $this->profile->subscribe();
+ common_log(LOG_INFO, __METHOD__ . ": sub was $ok");
+ if (!$ok) {
+ $this->showForm(_m('Feed subscription failed! Bad response from hub.'));
+ return;
+ }
+ }
+
+ // And subscribe the current user to the local profile
+ $user = common_current_user();
+ $profile = $this->profile->getProfile();
+
+ if ($user->isSubscribed($profile)) {
+ $this->showForm(_m('Already subscribed!'));
+ } elseif ($user->subscribeTo($profile)) {
+ $this->showForm(_m('Feed subscribed!'));
+ } else {
+ $this->showForm(_m('Feed subscription failed!'));
+ }
+ }
+ }
+
+
+ function previewFeed()
+ {
+ $profile = $this->munger->ostatusProfile();
+ $notice = $this->munger->notice(0, true); // preview
+
+ if ($notice) {
+ $this->element('b', null, 'Preview of latest post from this feed:');
+
+ $item = new NoticeList($notice, $this);
+ $item->show();
+ } else {
+ $this->element('b', null, 'No posts in this feed yet.');
+ }
+ }
+
+
+} \ No newline at end of file
diff --git a/plugins/FeedSub/actions/feedsubcallback.php b/plugins/OStatus/actions/pushcallback.php
index 0c4280c1f..2601a377a 100644
--- a/plugins/FeedSub/actions/feedsubcallback.php
+++ b/plugins/OStatus/actions/pushcallback.php
@@ -25,7 +25,7 @@
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-class FeedSubCallbackAction extends Action
+class PushCallbackAction extends Action
{
function handle()
{
@@ -48,13 +48,18 @@ class FeedSubCallbackAction extends Action
throw new ServerException('Empty or invalid feed id', 400);
}
- $feedinfo = Feedinfo::staticGet('id', $feedid);
- if (!$feedinfo) {
- throw new ServerException('Unknown feed id ' . $feedid, 400);
+ $profile = Ostatus_profile::staticGet('id', $feedid);
+ if (!$profile) {
+ throw new ServerException('Unknown OStatus/PuSH feed id ' . $feedid, 400);
}
-
+
+ $hmac = '';
+ if (isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) {
+ $hmac = $_SERVER['HTTP_X_HUB_SIGNATURE'];
+ }
+
$post = file_get_contents('php://input');
- $feedinfo->postUpdates($post);
+ $profile->postUpdates($post, $hmac);
}
/**
@@ -73,28 +78,30 @@ class FeedSubCallbackAction extends Action
throw new ServerException("Bogus hub callback: bad mode", 404);
}
- $feedinfo = Feedinfo::staticGet('feeduri', $topic);
- if (!$feedinfo) {
+ $profile = Ostatus_profile::staticGet('feeduri', $topic);
+ if (!$profile) {
common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback for unknown feed $topic");
throw new ServerException("Bogus hub callback: unknown feed", 404);
}
- # Can't currently set the token in our sub api
- #if ($feedinfo->verify_token !== $verify_token) {
- # common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with bad token \"$verify_token\" for feed $topic");
- # throw new ServerError("Bogus hub callback: bad token", 404);
- #}
-
+ if ($profile->verify_token !== $verify_token) {
+ common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with bad token \"$verify_token\" for feed $topic");
+ throw new ServerError("Bogus hub callback: bad token", 404);
+ }
+
+ if ($mode != $profile->sub_state) {
+ common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with bad mode \"$mode\" for feed $topic in state \"{$profile->sub_state}\"");
+ throw new ServerException("Bogus hub callback: mode doesn't match subscription state.", 404);
+ }
+
// OK!
- common_log(LOG_INFO, __METHOD__ . ': sub confirmed');
- $feedinfo->sub_start = common_sql_date(time());
- if ($lease_seconds > 0) {
- $feedinfo->sub_end = common_sql_date(time() + $lease_seconds);
+ if ($mode == 'subscribe') {
+ common_log(LOG_INFO, __METHOD__ . ': sub confirmed');
+ $profile->confirmSubscribe($lease_seconds);
} else {
- $feedinfo->sub_end = null;
+ common_log(LOG_INFO, __METHOD__ . ": unsub confirmed; deleting sub record for $topic");
+ $profile->confirmUnsubscribe();
}
- $feedinfo->update();
-
print $challenge;
}
}
diff --git a/plugins/OStatus/actions/pushhub.php b/plugins/OStatus/actions/pushhub.php
new file mode 100644
index 000000000..901c18f70
--- /dev/null
+++ b/plugins/OStatus/actions/pushhub.php
@@ -0,0 +1,176 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Integrated PuSH hub; lets us only ping them what need it.
+ * @package Hub
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+/**
+
+
+Things to consider...
+* should we purge incomplete subscriptions that never get a verification pingback?
+* when can we send subscription renewal checks?
+ - at next send time probably ok
+* when can we handle trimming of subscriptions?
+ - at next send time probably ok
+* should we keep a fail count?
+
+*/
+
+
+class PushHubAction extends Action
+{
+ function arg($arg, $def=null)
+ {
+ // PHP converts '.'s in incoming var names to '_'s.
+ // It also merges multiple values, which'll break hub.verify and hub.topic for publishing
+ // @fixme handle multiple args
+ $arg = str_replace('.', '_', $arg);
+ return parent::arg($arg, $def);
+ }
+
+ function prepare($args)
+ {
+ StatusNet::setApi(true); // reduce exception reports to aid in debugging
+ return parent::prepare($args);
+ }
+
+ function handle()
+ {
+ $mode = $this->trimmed('hub.mode');
+ switch ($mode) {
+ case "subscribe":
+ $this->subscribe();
+ break;
+ case "unsubscribe":
+ $this->unsubscribe();
+ break;
+ case "publish":
+ throw new ServerException("Publishing outside feeds not supported.", 400);
+ default:
+ throw new ServerException("Unrecognized mode '$mode'.", 400);
+ }
+ }
+
+ /**
+ * Process a PuSH feed subscription request.
+ *
+ * HTTP return codes:
+ * 202 Accepted - request saved and awaiting verification
+ * 204 No Content - already subscribed
+ * 403 Forbidden - rejecting this (not specifically spec'd)
+ */
+ function subscribe()
+ {
+ $feed = $this->argUrl('hub.topic');
+ $callback = $this->argUrl('hub.callback');
+
+ common_log(LOG_DEBUG, __METHOD__ . ": checking sub'd to $feed $callback");
+ if ($this->getSub($feed, $callback)) {
+ // Already subscribed; return 204 per spec.
+ header('HTTP/1.1 204 No Content');
+ common_log(LOG_DEBUG, __METHOD__ . ': already subscribed');
+ return;
+ }
+
+ common_log(LOG_DEBUG, __METHOD__ . ': setting up');
+ $sub = new HubSub();
+ $sub->topic = $feed;
+ $sub->callback = $callback;
+ $sub->secret = $this->arg('hub.secret', null);
+ $sub->setLease(intval($this->arg('hub.lease_seconds')));
+
+ // @fixme check for feeds we don't manage
+ // @fixme check the verification mode, might want a return immediately?
+
+ common_log(LOG_DEBUG, __METHOD__ . ': inserting');
+ $ok = $sub->insert();
+
+ if (!$ok) {
+ throw new ServerException("Failed to save subscription record", 500);
+ }
+
+ // @fixme check errors ;)
+
+ $data = array('sub' => $sub, 'mode' => 'subscribe');
+ $qm = QueueManager::get();
+ $qm->enqueue($data, 'hubverify');
+
+ header('HTTP/1.1 202 Accepted');
+ common_log(LOG_DEBUG, __METHOD__ . ': done');
+ }
+
+ /**
+ * Process a PuSH feed unsubscription request.
+ *
+ * HTTP return codes:
+ * 202 Accepted - request saved and awaiting verification
+ * 204 No Content - already subscribed
+ * 400 Bad Request - invalid params or rejected feed
+ */
+ function unsubscribe()
+ {
+ $feed = $this->argUrl('hub.topic');
+ $callback = $this->argUrl('hub.callback');
+ $sub = $this->getSub($feed, $callback);
+
+ if ($sub) {
+ if ($sub->verify('unsubscribe')) {
+ $sub->delete();
+ common_log(LOG_INFO, "PuSH unsubscribed $feed for $callback");
+ } else {
+ throw new ServerException("Failed PuSH unsubscription: verification failed! $feed for $callback");
+ }
+ } else {
+ throw new ServerException("Failed PuSH unsubscription: not subscribed! $feed for $callback");
+ }
+ }
+
+ /**
+ * Grab and validate a URL from POST parameters.
+ * @throws ServerException for malformed or non-http/https URLs
+ */
+ protected function argUrl($arg)
+ {
+ $url = $this->arg($arg);
+ $params = array('domain_check' => false, // otherwise breaks my local tests :P
+ 'allowed_schemes' => array('http', 'https'));
+ if (Validate::uri($url, $params)) {
+ return $url;
+ } else {
+ throw new ServerException("Invalid URL passed for $arg: '$url'", 400);
+ }
+ }
+
+ /**
+ * Get HubSub subscription record for a given feed & subscriber.
+ *
+ * @param string $feed
+ * @param string $callback
+ * @return mixed HubSub or false
+ */
+ protected function getSub($feed, $callback)
+ {
+ return HubSub::staticGet($feed, $callback);
+ }
+}
+
diff --git a/plugins/OStatus/actions/salmon.php b/plugins/OStatus/actions/salmon.php
new file mode 100644
index 000000000..b616027a9
--- /dev/null
+++ b/plugins/OStatus/actions/salmon.php
@@ -0,0 +1,81 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @author James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class SalmonAction extends Action
+{
+ var $user = null;
+ var $xml = null;
+ var $activity = null;
+
+ function prepare($args)
+ {
+ if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+ $this->clientError(_('This method requires a POST.'));
+ }
+
+ if ($_SERVER['CONTENT_TYPE'] != 'application/atom+xml') {
+ $this->clientError(_('Salmon requires application/atom+xml'));
+ }
+
+ $id = $this->trimmed('id');
+
+ if (!$id) {
+ $this->clientError(_('No ID.'));
+ }
+
+ $this->user = User::staticGet($id);
+
+ if (empty($this->user)) {
+ $this->clientError(_('No such user.'));
+ }
+
+ $xml = file_get_contents('php://input');
+
+ $dom = DOMDocument::loadXML($xml);
+
+ // XXX: check that document element is Atom entry
+ // XXX: check the signature
+
+ $this->act = Activity::fromAtomEntry($dom->documentElement);
+ }
+
+ function handle($args)
+ {
+ common_log(LOG_DEBUG, 'Salmon: incoming post for user: '. $user_id);
+
+ // TODO : Insert new $xml -> notice code
+
+ switch ($this->act->verb)
+ {
+ case Activity::POST:
+ case Activity::SHARE:
+ case Activity::FAVORITE:
+ case Activity::FOLLOW:
+ }
+ }
+}
diff --git a/plugins/OStatus/actions/webfinger.php b/plugins/OStatus/actions/webfinger.php
new file mode 100644
index 000000000..75ba16638
--- /dev/null
+++ b/plugins/OStatus/actions/webfinger.php
@@ -0,0 +1,77 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class WebfingerAction extends Action
+{
+
+ public $uri;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $this->uri = $this->trimmed('uri');
+
+ return true;
+ }
+
+ function handle()
+ {
+ $acct = Webfinger::normalize($this->uri);
+
+ $xrd = new XRD();
+
+ list($nick, $domain) = explode('@', urldecode($acct));
+ $nick = common_canonical_nickname($nick);
+
+ $this->user = User::staticGet('nickname', $nick);
+ if (!$this->user) {
+ $this->clientError(_('No such user.'), 404);
+ return false;
+ }
+
+ $xrd->subject = $this->uri;
+ $xrd->alias[] = common_profile_url($nick);
+ $xrd->links[] = array('rel' => 'http://webfinger.net/rel/profile-page',
+ 'type' => 'text/html',
+ 'href' => common_profile_url($nick));
+
+ $salmon_url = common_local_url('salmon',
+ array('id' => $this->user->id));
+
+ $xrd->links[] = array('rel' => 'salmon',
+ 'href' => $salmon_url);
+
+ // TODO - finalize where the redirect should go on the publisher
+ $url = common_local_url('ostatussub') . '?feed={uri}';
+ $xrd->links[] = array('rel' => 'http://ostatus.org/schema/1.0/subscribe',
+ 'template' => $url );
+
+ header('Content-type: text/xml');
+ print $xrd->toXML();
+ }
+
+}
diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php
new file mode 100644
index 000000000..7071ee5b4
--- /dev/null
+++ b/plugins/OStatus/classes/HubSub.php
@@ -0,0 +1,272 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * PuSH feed subscription record
+ * @package Hub
+ * @author Brion Vibber <brion@status.net>
+ */
+class HubSub extends Memcached_DataObject
+{
+ public $__table = 'hubsub';
+
+ public $hashkey; // sha1(topic . '|' . $callback); (topic, callback) key is too long for myisam in utf8
+ public $topic;
+ public $callback;
+ public $secret;
+ public $verify_token;
+ public $challenge;
+ public $lease;
+ public $sub_start;
+ public $sub_end;
+ public $created;
+
+ public /*static*/ function staticGet($topic, $callback)
+ {
+ return parent::staticGet(__CLASS__, 'hashkey', self::hashkey($topic, $callback));
+ }
+
+ protected static function hashkey($topic, $callback)
+ {
+ return sha1($topic . '|' . $callback);
+ }
+
+ /**
+ * return table definition for DB_DataObject
+ *
+ * DB_DataObject needs to know something about the table to manipulate
+ * instances. This method provides all the DB_DataObject needs to know.
+ *
+ * @return array array of column definitions
+ */
+
+ function table()
+ {
+ return array('hashkey' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'topic' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'callback' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'secret' => DB_DATAOBJECT_STR,
+ 'verify_token' => DB_DATAOBJECT_STR,
+ 'challenge' => DB_DATAOBJECT_STR,
+ 'lease' => DB_DATAOBJECT_INT,
+ 'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ }
+
+ static function schemaDef()
+ {
+ return array(new ColumnDef('hashkey', 'char',
+ /*size*/40,
+ /*nullable*/false,
+ /*key*/'PRI'),
+ new ColumnDef('topic', 'varchar',
+ /*size*/255,
+ /*nullable*/false,
+ /*key*/'KEY'),
+ new ColumnDef('callback', 'varchar',
+ 255, false),
+ new ColumnDef('secret', 'text',
+ null, true),
+ new ColumnDef('verify_token', 'text',
+ null, true),
+ new ColumnDef('challenge', 'varchar',
+ 32, true),
+ new ColumnDef('lease', 'int',
+ null, true),
+ new ColumnDef('sub_start', 'datetime',
+ null, true),
+ new ColumnDef('sub_end', 'datetime',
+ null, true),
+ new ColumnDef('created', 'datetime',
+ null, false));
+ }
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ function sequenceKeys()
+ {
+ return array(false, false, false);
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * DB_DataObject needs to know about keys that the table has; this function
+ * defines them.
+ *
+ * @return array key definitions
+ */
+
+ function keyTypes()
+ {
+ return array('hashkey' => 'K');
+ }
+
+ /**
+ * Validates a requested lease length, sets length plus
+ * subscription start & end dates.
+ *
+ * Does not save to database -- use before insert() or update().
+ *
+ * @param int $length in seconds
+ */
+ function setLease($length)
+ {
+ assert(is_int($length));
+
+ $min = 86400;
+ $max = 86400 * 30;
+
+ if ($length == 0) {
+ // We want to garbage collect dead subscriptions!
+ $length = $max;
+ } elseif( $length < $min) {
+ $length = $min;
+ } else if ($length > $max) {
+ $length = $max;
+ }
+
+ $this->lease = $length;
+ $this->start_sub = common_sql_now();
+ $this->end_sub = common_sql_date(time() + $length);
+ }
+
+ /**
+ * Send a verification ping to subscriber
+ * @param string $mode 'subscribe' or 'unsubscribe'
+ */
+ function verify($mode)
+ {
+ assert($mode == 'subscribe' || $mode == 'unsubscribe');
+
+ // Is this needed? data object fun...
+ $clone = clone($this);
+ $clone->challenge = common_good_rand(16);
+ $clone->update($this);
+ $this->challenge = $clone->challenge;
+ unset($clone);
+
+ $params = array('hub.mode' => $mode,
+ 'hub.topic' => $this->topic,
+ 'hub.challenge' => $this->challenge);
+ if ($mode == 'subscribe') {
+ $params['hub.lease_seconds'] = $this->lease;
+ }
+ if ($this->verify_token) {
+ $params['hub.verify_token'] = $this->verify_token;
+ }
+ $url = $this->callback . '?' . http_build_query($params, '', '&'); // @fixme ugly urls
+
+ try {
+ $request = new HTTPClient();
+ $response = $request->get($url);
+ $status = $response->getStatus();
+
+ if ($status >= 200 && $status < 300) {
+ $fail = false;
+ } else {
+ // @fixme how can we schedule a second attempt?
+ // Or should we?
+ $fail = "Returned HTTP $status";
+ }
+ } catch (Exception $e) {
+ $fail = $e->getMessage();
+ }
+ if ($fail) {
+ // @fixme how can we schedule a second attempt?
+ // or save a fail count?
+ // Or should we?
+ common_log(LOG_ERR, "Failed to verify $mode for $this->topic at $this->callback: $fail");
+ return false;
+ } else {
+ if ($mode == 'subscribe') {
+ // Establish or renew the subscription!
+ // This seems unnecessary... dataobject fun!
+ $clone = clone($this);
+ $clone->challenge = null;
+ $clone->setLease($this->lease);
+ $clone->update($this);
+ unset($clone);
+
+ $this->challenge = null;
+ $this->setLease($this->lease);
+ common_log(LOG_ERR, "Verified $mode of $this->callback:$this->topic for $this->lease seconds");
+ } else if ($mode == 'unsubscribe') {
+ common_log(LOG_ERR, "Verified $mode of $this->callback:$this->topic");
+ $this->delete();
+ }
+ return true;
+ }
+ }
+
+ /**
+ * Insert wrapper; transparently set the hash key from topic and callback columns.
+ * @return boolean success
+ */
+ function insert()
+ {
+ $this->hashkey = self::hashkey($this->topic, $this->callback);
+ return parent::insert();
+ }
+
+ /**
+ * Send a 'fat ping' to the subscriber's callback endpoint
+ * containing the given Atom feed chunk.
+ *
+ * Determination of which items to send should be done at
+ * a higher level; don't just shove in a complete feed!
+ *
+ * @param string $atom well-formed Atom feed
+ */
+ function push($atom)
+ {
+ $headers = array('Content-Type: application/atom+xml');
+ if ($this->secret) {
+ $hmac = hash_hmac('sha1', $atom, $this->secret);
+ $headers[] = "X-Hub-Signature: sha1=$hmac";
+ } else {
+ $hmac = '(none)';
+ }
+ common_log(LOG_INFO, "About to push feed to $this->callback for $this->topic, HMAC $hmac");
+ try {
+ $request = new HTTPClient();
+ $request->setBody($atom);
+ $response = $request->post($this->callback, $headers);
+
+ if ($response->isOk()) {
+ return true;
+ }
+ common_log(LOG_ERR, "Error sending PuSH content " .
+ "to $this->callback for $this->topic: " .
+ $response->getStatus());
+ return false;
+
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Error sending PuSH content " .
+ "to $this->callback for $this->topic: " .
+ $e->getMessage());
+ return false;
+ }
+ }
+}
+
diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php
new file mode 100644
index 000000000..733d8843b
--- /dev/null
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -0,0 +1,644 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009-2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package FeedSubPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+/*
+PuSH subscription flow:
+
+ $profile->subscribe()
+ generate random verification token
+ save to verify_token
+ sends a sub request to the hub...
+
+ main/push/callback
+ hub sends confirmation back to us via GET
+ We verify the request, then echo back the challenge.
+ On our end, we save the time we subscribed and the lease expiration
+
+ main/push/callback
+ hub sends us updates via POST
+
+*/
+
+class FeedDBException extends FeedSubException
+{
+ public $obj;
+
+ function __construct($obj)
+ {
+ parent::__construct('Database insert failure');
+ $this->obj = $obj;
+ }
+}
+
+class Ostatus_profile extends Memcached_DataObject
+{
+ public $__table = 'ostatus_profile';
+
+ public $id;
+ public $profile_id;
+ public $group_id;
+
+ public $feeduri;
+ public $homeuri;
+
+ // PuSH subscription data
+ public $huburi;
+ public $secret;
+ public $verify_token;
+ public $sub_state; // subscribe, active, unsubscribe
+ public $sub_start;
+ public $sub_end;
+
+ public $salmonuri;
+
+ public $created;
+ public $lastupdate;
+
+
+ public /*static*/ function staticGet($k, $v=null)
+ {
+ return parent::staticGet(__CLASS__, $k, $v);
+ }
+
+ /**
+ * return table definition for DB_DataObject
+ *
+ * DB_DataObject needs to know something about the table to manipulate
+ * instances. This method provides all the DB_DataObject needs to know.
+ *
+ * @return array array of column definitions
+ */
+
+ function table()
+ {
+ return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'profile_id' => DB_DATAOBJECT_INT,
+ 'group_id' => DB_DATAOBJECT_INT,
+ 'feeduri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'homeuri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'huburi' => DB_DATAOBJECT_STR,
+ 'secret' => DB_DATAOBJECT_STR,
+ 'verify_token' => DB_DATAOBJECT_STR,
+ 'sub_state' => DB_DATAOBJECT_STR,
+ 'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'salmonuri' => DB_DATAOBJECT_STR,
+ 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
+ 'lastupdate' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ }
+
+ static function schemaDef()
+ {
+ return array(new ColumnDef('id', 'integer',
+ /*size*/ null,
+ /*nullable*/ false,
+ /*key*/ 'PRI',
+ /*default*/ '0',
+ /*extra*/ null,
+ /*auto_increment*/ true),
+ new ColumnDef('profile_id', 'integer',
+ null, true, 'UNI'),
+ new ColumnDef('group_id', 'integer',
+ null, true, 'UNI'),
+ new ColumnDef('feeduri', 'varchar',
+ 255, false, 'UNI'),
+ new ColumnDef('homeuri', 'varchar',
+ 255, false),
+ new ColumnDef('huburi', 'text',
+ null, true),
+ new ColumnDef('verify_token', 'varchar',
+ 32, true),
+ new ColumnDef('secret', 'varchar',
+ 64, true),
+ new ColumnDef('sub_state', "enum('subscribe','active','unsubscribe')",
+ null, true),
+ new ColumnDef('sub_start', 'datetime',
+ null, true),
+ new ColumnDef('sub_end', 'datetime',
+ null, true),
+ new ColumnDef('salmonuri', 'text',
+ null, true),
+ new ColumnDef('created', 'datetime',
+ null, false),
+ new ColumnDef('lastupdate', 'datetime',
+ null, false));
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * DB_DataObject needs to know about keys that the table has; this function
+ * defines them.
+ *
+ * @return array key definitions
+ */
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ /**
+ * return key definitions for Memcached_DataObject
+ *
+ * Our caching system uses the same key definitions, but uses a different
+ * method to get them.
+ *
+ * @return array key definitions
+ */
+
+ function keyTypes()
+ {
+ return array('id' => 'K', 'profile_id' => 'U', 'group_id' => 'U', 'feeduri' => 'U');
+ }
+
+ function sequenceKey()
+ {
+ return array('id', true, false);
+ }
+
+ /**
+ * Fetch the StatusNet-side profile for this feed
+ * @return Profile
+ */
+ public function localProfile()
+ {
+ if ($this->profile_id) {
+ return Profile::staticGet('id', $this->profile_id);
+ }
+ return null;
+ }
+
+ /**
+ * Fetch the StatusNet-side profile for this feed
+ * @return Profile
+ */
+ public function localGroup()
+ {
+ if ($this->group_id) {
+ return User_group::staticGet('id', $this->group_id);
+ }
+ return null;
+ }
+
+ /**
+ * @param FeedMunger $munger
+ * @param boolean $isGroup is this a group record?
+ * @return Ostatus_profile
+ */
+ public static function ensureProfile($munger)
+ {
+ $profile = $munger->ostatusProfile();
+
+ $current = self::staticGet('feeduri', $profile->feeduri);
+ if ($current) {
+ // @fixme we should probably update info as necessary
+ return $current;
+ }
+
+ $profile->query('BEGIN');
+
+ // Awful hack! Awful hack!
+ $profile->verify = common_good_rand(16);
+ $profile->secret = common_good_rand(32);
+
+ try {
+ $local = $munger->profile();
+
+ if ($entity->isGroup()) {
+ $group = new User_group();
+ $group->nickname = $local->nickname . '@remote'; // @fixme
+ $group->fullname = $local->fullname;
+ $group->homepage = $local->homepage;
+ $group->location = $local->location;
+ $group->created = $local->created;
+ $group->insert();
+ if (empty($result)) {
+ throw new FeedDBException($group);
+ }
+ $profile->group_id = $group->id;
+ } else {
+ $result = $local->insert();
+ if (empty($result)) {
+ throw new FeedDBException($local);
+ }
+ $profile->profile_id = $local->id;
+ }
+
+ $profile->created = sql_common_date();
+ $profile->lastupdate = sql_common_date();
+ $result = $profile->insert();
+ if (empty($result)) {
+ throw new FeedDBException($profile);
+ }
+
+ $entity->query('COMMIT');
+ } catch (FeedDBException $e) {
+ common_log_db_error($e->obj, 'INSERT', __FILE__);
+ $entity->query('ROLLBACK');
+ return false;
+ }
+
+ $avatar = $munger->getAvatar();
+ if ($avatar) {
+ try {
+ $this->updateAvatar($avatar);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Exception setting OStatus avatar: " .
+ $e->getMessage());
+ }
+ }
+
+ return $entity;
+ }
+
+ /**
+ * Download and update given avatar image
+ * @param string $url
+ * @throws Exception in various failure cases
+ */
+ public function updateAvatar($url)
+ {
+ // @fixme this should be better encapsulated
+ // ripped from oauthstore.php (for old OMB client)
+ $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar');
+ copy($url, $temp_filename);
+ $imagefile = new ImageFile($profile->id, $temp_filename);
+ $filename = Avatar::filename($profile->id,
+ image_type_to_extension($imagefile->type),
+ null,
+ common_timestamp());
+ rename($temp_filename, Avatar::path($filename));
+ if ($this->isGroup()) {
+ $group = $this->localGroup();
+ $group->setOriginal($filename);
+ } else {
+ $profile = $this->localProfile();
+ $profile->setOriginal($filename);
+ }
+ }
+
+ /**
+ * Returns an XML string fragment with profile information as an
+ * Activity Streams noun object with the given element type.
+ *
+ * Assumes that 'activity' namespace has been previously defined.
+ *
+ * @param string $element one of 'actor', 'subject', 'object', 'target'
+ * @return string
+ */
+ function asActivityNoun($element)
+ {
+ $xs = new XMLStringer(true);
+
+ $avatarHref = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ $avatarType = 'image/png';
+ if ($this->isGroup()) {
+ $type = 'http://activitystrea.ms/schema/1.0/group';
+ $self = $this->localGroup();
+
+ // @fixme put a standard getAvatar() interface on groups too
+ if ($self->homepage_logo) {
+ $avatarHref = $self->homepage_logo;
+ $map = array('png' => 'image/png',
+ 'jpg' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'gif' => 'image/gif');
+ $extension = pathinfo(parse_url($avatarHref, PHP_URL_PATH), PATHINFO_EXTENSION);
+ if (isset($map[$extension])) {
+ $avatarType = $map[$extension];
+ }
+ }
+ } else {
+ $type = 'http://activitystrea.ms/schema/1.0/person';
+ $self = $this->localProfile();
+ $avatar = $self->getAvatar(AVATAR_PROFILE_SIZE);
+ if ($avatar) {
+ $avatarHref = $avatar->
+ $avatarType = $avatar->mediatype;
+ }
+ }
+ $xs->elementStart('activity:' . $element);
+ $xs->element(
+ 'activity:object-type',
+ null,
+ $type
+ );
+ $xs->element(
+ 'id',
+ null,
+ $this->homeuri); // ?
+ $xs->element('title', null, $self->getBestName());
+
+ $xs->element(
+ 'link', array(
+ 'type' => $avatarType,
+ 'href' => $avatarHref
+ ),
+ ''
+ );
+
+ $xs->elementEnd('activity:' . $element);
+
+ return $xs->getString();
+ }
+
+ /**
+ * Damn dirty hack!
+ */
+ function isGroup()
+ {
+ return (strpos($this->feeduri, '/groups/') !== false);
+ }
+
+ /**
+ * Send a subscription request to the hub for this feed.
+ * The hub will later send us a confirmation POST to /main/push/callback.
+ *
+ * @return bool true on success, false on failure
+ */
+ public function subscribe($mode='subscribe')
+ {
+ if (common_config('feedsub', 'nohub')) {
+ // Fake it! We're just testing remote feeds w/o hubs.
+ return true;
+ }
+ // @fixme use the verification token
+ #$token = md5(mt_rand() . ':' . $this->feeduri);
+ #$this->verify_token = $token;
+ #$this->update(); // @fixme
+ try {
+ $callback = common_local_url('pushcallback', array('feed' => $this->id));
+ $headers = array('Content-Type: application/x-www-form-urlencoded');
+ $post = array('hub.mode' => $mode,
+ 'hub.callback' => $callback,
+ 'hub.verify' => 'async',
+ 'hub.verify_token' => $this->verify_token,
+ 'hub.secret' => $this->secret,
+ //'hub.lease_seconds' => 0,
+ 'hub.topic' => $this->feeduri);
+ $client = new HTTPClient();
+ $response = $client->post($this->huburi, $headers, $post);
+ $status = $response->getStatus();
+ if ($status == 202) {
+ common_log(LOG_INFO, __METHOD__ . ': sub req ok, awaiting verification callback');
+ return true;
+ } else if ($status == 204) {
+ common_log(LOG_INFO, __METHOD__ . ': sub req ok and verified');
+ return true;
+ } else if ($status >= 200 && $status < 300) {
+ common_log(LOG_ERR, __METHOD__ . ": sub req returned unexpected HTTP $status: " . $response->getBody());
+ return false;
+ } else {
+ common_log(LOG_ERR, __METHOD__ . ": sub req failed with HTTP $status: " . $response->getBody());
+ return false;
+ }
+ } catch (Exception $e) {
+ // wtf!
+ common_log(LOG_ERR, __METHOD__ . ": error \"{$e->getMessage()}\" hitting hub $this->huburi subscribing to $this->feeduri");
+ return false;
+ }
+ }
+
+ /**
+ * Save PuSH subscription confirmation.
+ * Sets approximate lease start and end times and finalizes state.
+ *
+ * @param int $lease_seconds provided hub.lease_seconds parameter, if given
+ */
+ public function confirmSubscribe($lease_seconds=0)
+ {
+ $original = clone($this);
+
+ $this->sub_state = 'active';
+ $this->sub_start = common_sql_date(time());
+ if ($lease_seconds > 0) {
+ $this->sub_end = common_sql_date(time() + $lease_seconds);
+ } else {
+ $this->sub_end = null;
+ }
+ $this->lastupdate = common_sql_date();
+
+ return $this->update($original);
+ }
+
+ /**
+ * Save PuSH unsubscription confirmation.
+ * Wipes active PuSH sub info and resets state.
+ */
+ public function confirmUnsubscribe()
+ {
+ $original = clone($this);
+
+ $this->verify_token = null;
+ $this->secret = null;
+ $this->sub_state = null;
+ $this->sub_start = null;
+ $this->sub_end = null;
+ $this->lastupdate = common_sql_date();
+
+ return $this->update($original);
+ }
+
+ /**
+ * Send a PuSH unsubscription request to the hub for this feed.
+ * The hub will later send us a confirmation POST to /main/push/callback.
+ *
+ * @return bool true on success, false on failure
+ */
+ public function unsubscribe() {
+ return $this->subscribe('unsubscribe');
+ }
+
+ /**
+ * Send an Activity Streams notification to the remote Salmon endpoint,
+ * if so configured.
+ *
+ * @param Profile $actor
+ * @param $verb eg Activity::SUBSCRIBE or Activity::JOIN
+ * @param $object object of the action; if null, the remote entity itself is assumed
+ */
+ public function notify(Profile $actor, $verb, $object=null)
+ {
+ if ($object == null) {
+ $object = $this;
+ }
+ if ($this->salmonuri) {
+ $text = 'update'; // @fixme
+ $id = 'tag:' . common_config('site', 'server') .
+ ':' . $verb .
+ ':' . $actor->id .
+ ':' . time(); // @fixme
+
+ $entry = new Atom10Entry();
+ $entry->elementStart('entry');
+ $entry->element('id', null, $id);
+ $entry->element('title', null, $text);
+ $entry->element('summary', null, $text);
+ $entry->element('published', null, common_date_w3dtf());
+
+ $entry->element('activity:verb', null, $verb);
+ $entry->raw($profile->asAtomAuthor());
+ $entry->raw($profile->asActivityActor());
+ $entry->raw($object->asActivityNoun('object'));
+ $entry->elmentEnd('entry');
+
+ $feed = $this->atomFeed($actor);
+ $feed->initFeed();
+ $feed->addEntry($entry);
+ $feed->renderEntries();
+ $feed->endFeed();
+
+ $xml = $feed->getString();
+ common_log(LOG_INFO, "Posting to Salmon endpoint $salmon: $xml");
+
+ $salmon = new Salmon(); // ?
+ $salmon->post($this->salmonuri, $xml);
+ }
+ }
+
+ function getBestName()
+ {
+ if ($this->isGroup()) {
+ return $this->localGroup()->getBestName();
+ } else {
+ return $this->localProfile()->getBestName();
+ }
+ }
+
+ function atomFeed($actor)
+ {
+ $feed = new Atom10Feed();
+ // @fixme should these be set up somewhere else?
+ $feed->addNamespace('activity', 'http://activitystrea.ms/spec/1.0/');
+ $feed->addNamesapce('thr', 'http://purl.org/syndication/thread/1.0');
+ $feed->addNamespace('georss', 'http://www.georss.org/georss');
+ $feed->addNamespace('ostatus', 'http://ostatus.org/schema/1.0');
+
+ $taguribase = common_config('integration', 'taguri');
+ $feed->setId("tag:{$taguribase}:UserTimeline:{$actor->id}"); // ???
+
+ $feed->setTitle($actor->getBestName() . ' timeline'); // @fixme
+ $feed->setUpdated(time());
+ $feed->setPublished(time());
+
+ $feed->addLink(common_url('ApiTimelineUser',
+ array('id' => $actor->id,
+ 'type' => 'atom')),
+ array('rel' => 'self',
+ 'type' => 'application/atom+xml'));
+
+ $feed->addLink(common_url('userbyid',
+ array('id' => $actor->id)),
+ array('rel' => 'alternate',
+ 'type' => 'text/html'));
+
+ return $feed;
+ }
+
+ /**
+ * Read and post notices for updates from the feed.
+ * Currently assumes that all items in the feed are new,
+ * coming from a PuSH hub.
+ *
+ * @param string $xml source of Atom or RSS feed
+ * @param string $hmac X-Hub-Signature header, if present
+ */
+ public function postUpdates($xml, $hmac)
+ {
+ common_log(LOG_INFO, __METHOD__ . ": packet for \"$this->feeduri\"! $hmac $xml");
+
+ if ($this->secret) {
+ if (preg_match('/^sha1=([0-9a-fA-F]{40})$/', $hmac, $matches)) {
+ $their_hmac = strtolower($matches[1]);
+ $our_hmac = hash_hmac('sha1', $xml, $this->secret);
+ if ($their_hmac !== $our_hmac) {
+ common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with bad SHA-1 HMAC: got $their_hmac, expected $our_hmac");
+ return;
+ }
+ } else {
+ common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with bogus HMAC '$hmac'");
+ return;
+ }
+ } else if ($hmac) {
+ common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with unexpected HMAC '$hmac'");
+ return;
+ }
+
+ require_once "XML/Feed/Parser.php";
+ $feed = new XML_Feed_Parser($xml, false, false, true);
+ $munger = new FeedMunger($feed);
+
+ $hits = 0;
+ foreach ($feed as $index => $entry) {
+ // @fixme this might sort in wrong order if we get multiple updates
+
+ $notice = $munger->notice($index);
+
+ // Double-check for oldies
+ // @fixme this could explode horribly for multiple feeds on a blog. sigh
+ $dupe = new Notice();
+ $dupe->uri = $notice->uri;
+ if ($dupe->find(true)) {
+ common_log(LOG_WARNING, __METHOD__ . ": tried to save dupe notice for entry {$notice->uri} of feed {$this->feeduri}");
+ continue;
+ }
+
+ // @fixme need to ensure that groups get handled correctly
+ $saved = Notice::saveNew($notice->profile_id,
+ $notice->content,
+ 'ostatus',
+ array('is_local' => Notice::REMOTE_OMB,
+ 'uri' => $notice->uri,
+ 'lat' => $notice->lat,
+ 'lon' => $notice->lon,
+ 'location_ns' => $notice->location_ns,
+ 'location_id' => $notice->location_id));
+
+ /*
+ common_log(LOG_DEBUG, "going to check group delivery...");
+ if ($this->group_id) {
+ $group = User_group::staticGet($this->group_id);
+ if ($group) {
+ common_log(LOG_INFO, __METHOD__ . ": saving to local shadow group $group->id $group->nickname");
+ $groups = array($group);
+ } else {
+ common_log(LOG_INFO, __METHOD__ . ": lost the local shadow group?");
+ }
+ } else {
+ common_log(LOG_INFO, __METHOD__ . ": no local shadow groups");
+ $groups = array();
+ }
+ common_log(LOG_DEBUG, "going to add to inboxes...");
+ $notice->addToInboxes($groups, array());
+ common_log(LOG_DEBUG, "added to inboxes.");
+ */
+
+ $hits++;
+ }
+ if ($hits == 0) {
+ common_log(LOG_INFO, __METHOD__ . ": no updates in packet for \"$this->feeduri\"! $xml");
+ }
+ }
+}
diff --git a/plugins/FeedSub/extlib/README b/plugins/OStatus/extlib/README
index 799b40c47..799b40c47 100644
--- a/plugins/FeedSub/extlib/README
+++ b/plugins/OStatus/extlib/README
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser.php b/plugins/OStatus/extlib/XML/Feed/Parser.php
index ffe8220a5..ffe8220a5 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php b/plugins/OStatus/extlib/XML/Feed/Parser/Atom.php
index c7e218a1e..c7e218a1e 100644
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/Atom.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php b/plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php
index 063ecb617..063ecb617 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/Exception.php b/plugins/OStatus/extlib/XML/Feed/Parser/Exception.php
index 1e76e3f85..1e76e3f85 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/Exception.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/Exception.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php
index 07f38f911..07f38f911 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php
index d41f36e8d..d41f36e8d 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php
index 60c9938ba..60c9938ba 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php
index 3cd1ef15d..3cd1ef15d 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php
index 75918beda..75918beda 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php
index 8e36d5a9b..8e36d5a9b 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php
index 0936bd2f5..0936bd2f5 100644
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php
index 6edf910dc..6edf910dc 100755
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/Type.php b/plugins/OStatus/extlib/XML/Feed/Parser/Type.php
index 75052619b..75052619b 100644
--- a/plugins/FeedSub/extlib/XML/Feed/Parser/Type.php
+++ b/plugins/OStatus/extlib/XML/Feed/Parser/Type.php
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml
index 02e1c5800..02e1c5800 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml
index d181d2b6f..d181d2b6f 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml
index 98abf9d54..98abf9d54 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/delicious.feed b/plugins/OStatus/extlib/XML/Feed/samples/delicious.feed
index 32f9fa493..32f9fa493 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/delicious.feed
+++ b/plugins/OStatus/extlib/XML/Feed/samples/delicious.feed
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/flickr.feed b/plugins/OStatus/extlib/XML/Feed/samples/flickr.feed
index 57e83af57..57e83af57 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/flickr.feed
+++ b/plugins/OStatus/extlib/XML/Feed/samples/flickr.feed
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml b/plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml
index c351d3c16..c351d3c16 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/hoder.xml b/plugins/OStatus/extlib/XML/Feed/samples/hoder.xml
index 099463570..099463570 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/hoder.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/hoder.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml b/plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml
index 612186897..612186897 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml
index b0a1fee2d..b0a1fee2d 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml
index cfe91691f..cfe91691f 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml
index f0964a227..f0964a227 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml
index 5d75c352b..5d75c352b 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml
index 0edecf58e..0edecf58e 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml
index 26235f78f..26235f78f 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml
index 53483cc51..53483cc51 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml b/plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml
index f8a04bba5..f8a04bba5 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml
+++ b/plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/technorati.feed b/plugins/OStatus/extlib/XML/Feed/samples/technorati.feed
index 6274a32cd..6274a32cd 100755
--- a/plugins/FeedSub/extlib/XML/Feed/samples/technorati.feed
+++ b/plugins/OStatus/extlib/XML/Feed/samples/technorati.feed
diff --git a/plugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc
index e662d2626..e662d2626 100755
--- a/plugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc
+++ b/plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc
diff --git a/plugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc
index 725094788..725094788 100755
--- a/plugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc
+++ b/plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc
diff --git a/plugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc
index c8633766f..c8633766f 100755
--- a/plugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc
+++ b/plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc
diff --git a/plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch b/plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch
index c53bd9737..c53bd9737 100644
--- a/plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch
+++ b/plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch
diff --git a/plugins/FeedSub/images/24px-Feed-icon.svg.png b/plugins/OStatus/images/24px-Feed-icon.svg.png
index 317225814..317225814 100644
--- a/plugins/FeedSub/images/24px-Feed-icon.svg.png
+++ b/plugins/OStatus/images/24px-Feed-icon.svg.png
Binary files differ
diff --git a/plugins/FeedSub/images/48px-Feed-icon.svg.png b/plugins/OStatus/images/48px-Feed-icon.svg.png
index bd1da4f91..bd1da4f91 100644
--- a/plugins/FeedSub/images/48px-Feed-icon.svg.png
+++ b/plugins/OStatus/images/48px-Feed-icon.svg.png
Binary files differ
diff --git a/plugins/FeedSub/images/96px-Feed-icon.svg.png b/plugins/OStatus/images/96px-Feed-icon.svg.png
index bf16571ec..bf16571ec 100644
--- a/plugins/FeedSub/images/96px-Feed-icon.svg.png
+++ b/plugins/OStatus/images/96px-Feed-icon.svg.png
Binary files differ
diff --git a/plugins/FeedSub/images/README b/plugins/OStatus/images/README
index d9379c23e..d9379c23e 100644
--- a/plugins/FeedSub/images/README
+++ b/plugins/OStatus/images/README
diff --git a/plugins/OStatus/lib/activity.php b/plugins/OStatus/lib/activity.php
new file mode 100644
index 000000000..36e227913
--- /dev/null
+++ b/plugins/OStatus/lib/activity.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class ActivityNoun
+{
+ const ARTICLE = 'http://activitystrea.ms/schema/1.0/article';
+ const BLOGENTRY = 'http://activitystrea.ms/schema/1.0/blog-entry';
+ const NOTE = 'http://activitystrea.ms/schema/1.0/note';
+ const STATUS = 'http://activitystrea.ms/schema/1.0/status';
+ const FILE = 'http://activitystrea.ms/schema/1.0/file';
+ const PHOTO = 'http://activitystrea.ms/schema/1.0/photo';
+ const ALBUM = 'http://activitystrea.ms/schema/1.0/photo-album';
+ const PLAYLIST = 'http://activitystrea.ms/schema/1.0/playlist';
+ const VIDEO = 'http://activitystrea.ms/schema/1.0/video';
+ const AUDIO = 'http://activitystrea.ms/schema/1.0/audio';
+ const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark';
+ const PERSON = 'http://activitystrea.ms/schema/1.0/person';
+ const GROUP = 'http://activitystrea.ms/schema/1.0/group';
+ const PLACE = 'http://activitystrea.ms/schema/1.0/place';
+ const COMMENT = 'http://activitystrea.ms/schema/1.0/comment'; // tea
+
+ public $type;
+ public $id;
+ public $title;
+ public $summary;
+ public $content;
+}
+
+class Activity
+{
+ const NAMESPACE = 'http://activitystrea.ms/schema/1.0/';
+
+ const POST = 'http://activitystrea.ms/schema/1.0/post';
+ const SHARE = 'http://activitystrea.ms/schema/1.0/share';
+ const SAVE = 'http://activitystrea.ms/schema/1.0/save';
+ const FAVORITE = 'http://activitystrea.ms/schema/1.0/favorite';
+ const PLAY = 'http://activitystrea.ms/schema/1.0/play';
+ const FOLLOW = 'http://activitystrea.ms/schema/1.0/follow';
+ const FRIEND = 'http://activitystrea.ms/schema/1.0/make-friend';
+ const JOIN = 'http://activitystrea.ms/schema/1.0/join';
+ const TAG = 'http://activitystrea.ms/schema/1.0/tag';
+
+ public $actor; // an ActivityNoun
+ public $verb; // a string (the URL)
+ public $object; // an ActivityNoun
+ public $target; // an ActivityNoun
+
+ static function fromAtomEntry($domEntry)
+ {
+ }
+
+ function toAtomEntry()
+ {
+ }
+}
diff --git a/plugins/FeedSub/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php
index 35edaca33..39985fc90 100644
--- a/plugins/FeedSub/feeddiscovery.php
+++ b/plugins/OStatus/lib/feeddiscovery.php
@@ -48,6 +48,18 @@ class FeedSubNoFeedException extends FeedSubException
{
}
+/**
+ * Given a web page or feed URL, discover the final location of the feed
+ * and return its current contents.
+ *
+ * @example
+ * $feed = new FeedDiscovery();
+ * if ($feed->discoverFromURL($url)) {
+ * print $feed->uri;
+ * print $feed->type;
+ * processFeed($feed->body);
+ * }
+ */
class FeedDiscovery
{
public $uri;
@@ -64,7 +76,7 @@ class FeedDiscovery
/**
* @param string $url
- * @param bool $htmlOk
+ * @param bool $htmlOk pass false here if you don't want to follow web pages.
* @return string with validated URL
* @throws FeedSubBadURLException
* @throws FeedSubBadHtmlException
@@ -156,7 +168,13 @@ class FeedDiscovery
}
// Ok... now on to the links!
+ // Types listed in order of priority -- we'll prefer Atom if available.
// @fixme merge with the munger link checks
+ $feeds = array(
+ 'application/atom+xml' => false,
+ 'application/rss+xml' => false,
+ );
+
$nodes = $dom->getElementsByTagName('link');
for ($i = 0; $i < $nodes->length; $i++) {
$node = $nodes->item($i);
@@ -169,17 +187,21 @@ class FeedDiscovery
$type = trim($type->value);
$href = trim($href->value);
- $feedTypes = array(
- 'application/rss+xml',
- 'application/atom+xml',
- );
- if (trim($rel) == 'alternate' && in_array($type, $feedTypes)) {
- return $this->resolveURI($href, $base);
+ if (trim($rel) == 'alternate' && array_key_exists($type, $feeds) && empty($feeds[$type])) {
+ // Save the first feed found of each type...
+ $feeds[$type] = $this->resolveURI($href, $base);
}
}
}
}
+ // Return the highest-priority feed found
+ foreach ($feeds as $type => $url) {
+ if ($url) {
+ return $url;
+ }
+ }
+
return false;
}
diff --git a/plugins/FeedSub/feedmunger.php b/plugins/OStatus/lib/feedmunger.php
index f3618b8eb..c895b6ce2 100644
--- a/plugins/FeedSub/feedmunger.php
+++ b/plugins/OStatus/lib/feedmunger.php
@@ -30,8 +30,8 @@ class FeedSubPreviewNotice extends Notice
function __construct($profile)
{
- //parent::__construct(); // uhhh?
$this->profile = $profile;
+ $this->profile_id = 0;
}
function getProfile()
@@ -56,14 +56,19 @@ class FeedSubPreviewProfile extends Profile
{
function getAvatar($width, $height=null)
{
- return new FeedSubPreviewAvatar($width, $height);
+ return new FeedSubPreviewAvatar($width, $height, $this->avatar);
}
}
class FeedSubPreviewAvatar extends Avatar
{
+ function __construct($width, $height, $remote)
+ {
+ $this->remoteImage = $remote;
+ }
+
function displayUrl() {
- return common_path('plugins/FeedSub/images/48px-Feed-icon.svg.png');
+ return $this->remoteImage;
}
}
@@ -78,13 +83,17 @@ class FeedMunger
$this->url = $url;
}
- function feedinfo()
+ function ostatusProfile()
{
- $feedinfo = new Feedinfo();
- $feedinfo->feeduri = $this->url;
- $feedinfo->homeuri = $this->feed->link;
- $feedinfo->huburi = $this->getHubLink();
- return $feedinfo;
+ $profile = new Ostatus_profile();
+ $profile->feeduri = $this->url;
+ $profile->homeuri = $this->feed->link;
+ $profile->huburi = $this->getHubLink();
+ $salmon = $this->getSalmonLink();
+ if ($salmon) {
+ $profile->salmonuri = $salmon;
+ }
+ return $profile;
}
function getAtomLink($item, $attribs=array())
@@ -150,6 +159,33 @@ class FeedMunger
return $this->getAtomLink($this->feed, array('rel' => 'hub'));
}
+ function getSalmonLink()
+ {
+ return $this->getAtomLink($this->feed, array('rel' => 'salmon'));
+ }
+
+ function getSelfLink()
+ {
+ return $this->getAtomLink($this->feed, array('rel' => 'self'));
+ }
+
+ /**
+ * Get an appropriate avatar image source URL, if available.
+ * @return mixed string or false
+ */
+ function getAvatar()
+ {
+ $logo = $this->feed->logo;
+ if ($logo) {
+ return $logo;
+ }
+ $icon = $this->feed->icon;
+ if ($icon) {
+ return $icon;
+ }
+ return common_path('plugins/OStatus/images/48px-Feed-icon.svg.png');
+ }
+
function profile($preview=false)
{
if ($preview) {
@@ -164,6 +200,10 @@ class FeedMunger
$profile->homepage = $this->getAltLink($this->feed);
$profile->bio = $this->feed->description;
$profile->profileurl = $this->getAltLink($this->feed);
+
+ if ($preview) {
+ $profile->avatar = $this->getAvatar();
+ }
// @todo tags from categories
// @todo lat/lon/location?
@@ -177,60 +217,131 @@ class FeedMunger
if (!$entry) {
return null;
}
-
+
if ($preview) {
$notice = new FeedSubPreviewNotice($this->profile(true));
$notice->id = -1;
} else {
$notice = new Notice();
+ $notice->profile_id = $this->profileIdForEntry($index);
}
$link = $this->getAltLink($entry);
+ if (empty($link)) {
+ if (preg_match('!^https?://!', $entry->id)) {
+ $link = $entry->id;
+ common_log(LOG_DEBUG, "No link on entry, using URL from id: $link");
+ }
+ }
$notice->uri = $link;
$notice->url = $link;
$notice->content = $this->noticeFromEntry($entry);
- $notice->rendered = common_render_content($notice->content, $notice);
+ $notice->rendered = common_render_content($notice->content, $notice); // @fixme this is failing on group posts
$notice->created = common_sql_date($entry->updated); // @fixme
$notice->is_local = Notice::GATEWAY;
$notice->source = 'feed';
-
+
+ $location = $this->getLocation($entry);
+ if ($location) {
+ if ($location->location_id) {
+ $notice->location_ns = $location->location_ns;
+ $notice->location_id = $location->location_id;
+ }
+ $notice->lat = $location->lat;
+ $notice->lon = $location->lon;
+ }
+
return $notice;
}
+ function profileIdForEntry($index=1)
+ {
+ // hack hack hack
+ // should get profile for this entry's author...
+ $remote = Ostatus_profile::staticGet('feeduri', $this->getSelfLink());
+ if ($feed) {
+ return $feed->profile_id;
+ } else {
+ throw new Exception("Can't find feed profile");
+ }
+ }
+
+ /**
+ * Parse location given as a GeoRSS-simple point, if provided.
+ * http://www.georss.org/simple
+ *
+ * @param feed item $entry
+ * @return mixed Location or false
+ */
+ function getLocation($entry)
+ {
+ $dom = $entry->model;
+ $points = $dom->getElementsByTagNameNS('http://www.georss.org/georss', 'point');
+
+ for ($i = 0; $i < $points->length; $i++) {
+ $point = $points->item(0)->textContent;
+ $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace"
+ $point = preg_replace('/\s+/', ' ', $point);
+ $point = trim($point);
+ $coords = explode(' ', $point);
+ if (count($coords) == 2) {
+ list($lat, $lon) = $coords;
+ if (is_numeric($lat) && is_numeric($lon)) {
+ common_log(LOG_INFO, "Looking up location for $lat $lon from georss");
+ return Location::fromLatLon($lat, $lon);
+ }
+ }
+ common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
+ }
+
+ return false;
+ }
+
/**
* @param XML_Feed_Type $entry
* @return string notice text, within post size limit
*/
function noticeFromEntry($entry)
{
+ $max = Notice::maxContent();
+ $ellipsis = "\xe2\x80\xa6"; // U+2026 HORIZONTAL ELLIPSIS
$title = $entry->title;
$link = $entry->link;
-
+
// @todo We can get <category> entries like this:
// $cats = $entry->getCategory('category', array(0, true));
// but it feels like an awful hack. If it's accessible cleanly,
// try adding #hashtags from the categories/tags on a post.
-
- // @todo Should we force a language here?
- $format = _m('New post: "%1$s" %2$s');
+
$title = $entry->title;
$link = $this->getAltLink($entry);
- $out = sprintf($format, $title, $link);
-
- // Trim link if needed...
- $max = Notice::maxContent();
- if (mb_strlen($out) > $max) {
- $link = common_shorten_url($link);
+ if ($link) {
+ // Blog post or such...
+ // @todo Should we force a language here?
+ $format = _m('New post: "%1$s" %2$s');
$out = sprintf($format, $title, $link);
- }
- // Trim title if needed...
- if (mb_strlen($out) > $max) {
- $ellipsis = "\xe2\x80\xa6"; // U+2026 HORIZONTAL ELLIPSIS
- $used = mb_strlen($out) - mb_strlen($title);
- $available = $max - $used - mb_strlen($ellipsis);
- $title = mb_substr($title, 0, $available) . $ellipsis;
- $out = sprintf($format, $title, $link);
+ // Trim link if needed...
+ if (mb_strlen($out) > $max) {
+ $link = common_shorten_url($link);
+ $out = sprintf($format, $title, $link);
+ }
+
+ // Trim title if needed...
+ if (mb_strlen($out) > $max) {
+ $used = mb_strlen($out) - mb_strlen($title);
+ $available = $max - $used - mb_strlen($ellipsis);
+ $title = mb_substr($title, 0, $available) . $ellipsis;
+ $out = sprintf($format, $title, $link);
+ }
+ } else {
+ // No link? Consider a bare status update.
+ if (mb_strlen($title) > $max) {
+ $available = $max - mb_strlen($ellipsis);
+ $out = mb_substr($title, 0, $available) . $ellipsis;
+ } else {
+ $out = $title;
+ }
}
return $out;
diff --git a/plugins/OStatus/lib/hubdistribqueuehandler.php b/plugins/OStatus/lib/hubdistribqueuehandler.php
new file mode 100644
index 000000000..245a57f72
--- /dev/null
+++ b/plugins/OStatus/lib/hubdistribqueuehandler.php
@@ -0,0 +1,185 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Send a PuSH subscription verification from our internal hub.
+ * Queue up final distribution for
+ * @package Hub
+ * @author Brion Vibber <brion@status.net>
+ */
+class HubDistribQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'hubdistrib';
+ }
+
+ function handle($notice)
+ {
+ assert($notice instanceof Notice);
+
+ $this->pushUser($notice);
+ foreach ($notice->getGroups() as $group) {
+ $this->pushGroup($notice, $group->group_id);
+ }
+ return true;
+ }
+
+ function pushUser($notice)
+ {
+ // See if there's any PuSH subscriptions, including OStatus clients.
+ // @fixme handle group subscriptions as well
+ // http://identi.ca/api/statuses/user_timeline/1.atom
+ $feed = common_local_url('ApiTimelineUser',
+ array('id' => $notice->profile_id,
+ 'format' => 'atom'));
+ $this->pushFeed($feed, array($this, 'userFeedForNotice'), $notice);
+ }
+
+ function pushGroup($notice, $group_id)
+ {
+ $feed = common_local_url('ApiTimelineGroup',
+ array('id' => $group_id,
+ 'format' => 'atom'));
+ $this->pushFeed($feed, array($this, 'groupFeedForNotice'), $group_id, $notice);
+ }
+
+ /**
+ * @param string $feed URI to the feed
+ * @param callable $callback function to generate Atom feed update if needed
+ * any additional params are passed to the callback.
+ */
+ function pushFeed($feed, $callback)
+ {
+ $hub = common_config('ostatus', 'hub');
+ if ($hub) {
+ $this->pushFeedExternal($feed, $hub);
+ }
+
+ $sub = new HubSub();
+ $sub->topic = $feed;
+ if ($sub->find()) {
+ $args = array_slice(func_get_args(), 2);
+ $atom = call_user_func_array($callback, $args);
+ $this->pushFeedInternal($atom, $sub);
+ } else {
+ common_log(LOG_INFO, "No PuSH subscribers for $feed");
+ }
+ return true;
+ }
+
+ /**
+ * Ping external hub about this update.
+ * The hub will pull the feed and check for new items later.
+ * Not guaranteed safe in an environment with database replication.
+ *
+ * @param string $feed feed topic URI
+ * @param string $hub PuSH hub URI
+ * @fixme can consolidate pings for user & group posts
+ */
+ function pushFeedExternal($feed, $hub)
+ {
+ $client = new HTTPClient();
+ try {
+ $data = array('hub.mode' => 'publish',
+ 'hub.url' => $feed);
+ $response = $client->post($hub, array(), $data);
+ if ($response->getStatus() == 204) {
+ common_log(LOG_INFO, "PuSH ping to hub $hub for $feed ok");
+ return true;
+ } else {
+ common_log(LOG_ERR, "PuSH ping to hub $hub for $feed failed with HTTP " .
+ $response->getStatus() . ': ' .
+ $response->getBody());
+ }
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "PuSH ping to hub $hub for $feed failed: " . $e->getMessage());
+ return false;
+ }
+ }
+
+ /**
+ * Queue up direct feed update pushes to subscribers on our internal hub.
+ * @param string $atom update feed, containing only new/changed items
+ * @param HubSub $sub open query of subscribers
+ */
+ function pushFeedInternal($atom, $sub)
+ {
+ common_log(LOG_INFO, "Preparing $sub->N PuSH distribution(s) for $sub->topic");
+ $qm = QueueManager::get();
+ while ($sub->fetch()) {
+ common_log(LOG_INFO, "Prepping PuSH distribution to $sub->callback for $sub->topic");
+ $data = array('sub' => clone($sub),
+ 'atom' => $atom);
+ $qm->enqueue($data, 'hubout');
+ }
+ }
+
+ /**
+ * Build a single-item version of the sending user's Atom feed.
+ * @param Notice $notice
+ * @return string
+ */
+ function userFeedForNotice($notice)
+ {
+ // @fixme this feels VERY hacky...
+ // should probably be a cleaner way to do it
+
+ ob_start();
+ $api = new ApiTimelineUserAction();
+ $api->prepare(array('id' => $notice->profile_id,
+ 'format' => 'atom',
+ 'max_id' => $notice->id,
+ 'since_id' => $notice->id - 1));
+ $api->showTimeline();
+ $feed = ob_get_clean();
+
+ // ...and override the content-type back to something normal... eww!
+ // hope there's no other headers that got set while we weren't looking.
+ header('Content-Type: text/html; charset=utf-8');
+
+ common_log(LOG_DEBUG, $feed);
+ return $feed;
+ }
+
+ function groupFeedForNotice($group_id, $notice)
+ {
+ // @fixme this feels VERY hacky...
+ // should probably be a cleaner way to do it
+
+ ob_start();
+ $api = new ApiTimelineGroupAction();
+ $args = array('id' => $group_id,
+ 'format' => 'atom',
+ 'max_id' => $notice->id,
+ 'since_id' => $notice->id - 1);
+ $api->prepare($args);
+ $api->handle($args);
+ $feed = ob_get_clean();
+
+ // ...and override the content-type back to something normal... eww!
+ // hope there's no other headers that got set while we weren't looking.
+ header('Content-Type: text/html; charset=utf-8');
+
+ common_log(LOG_DEBUG, $feed);
+ return $feed;
+ }
+
+}
+
diff --git a/plugins/OStatus/lib/huboutqueuehandler.php b/plugins/OStatus/lib/huboutqueuehandler.php
new file mode 100644
index 000000000..0791c7e5d
--- /dev/null
+++ b/plugins/OStatus/lib/huboutqueuehandler.php
@@ -0,0 +1,52 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Send a raw PuSH atom update from our internal hub.
+ * @package Hub
+ * @author Brion Vibber <brion@status.net>
+ */
+class HubOutQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'hubout';
+ }
+
+ function handle($data)
+ {
+ $sub = $data['sub'];
+ $atom = $data['atom'];
+
+ assert($sub instanceof HubSub);
+ assert(is_string($atom));
+
+ try {
+ $sub->push($atom);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Failed PuSH to $sub->callback for $sub->topic: " .
+ $e->getMessage());
+ // @fixme Reschedule a later delivery?
+ return true;
+ }
+
+ return true;
+ }
+}
+
diff --git a/plugins/OStatus/lib/hubverifyqueuehandler.php b/plugins/OStatus/lib/hubverifyqueuehandler.php
new file mode 100644
index 000000000..125d13a77
--- /dev/null
+++ b/plugins/OStatus/lib/hubverifyqueuehandler.php
@@ -0,0 +1,53 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Send a PuSH subscription verification from our internal hub.
+ * @package Hub
+ * @author Brion Vibber <brion@status.net>
+ */
+class HubVerifyQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'hubverify';
+ }
+
+ function handle($data)
+ {
+ $sub = $data['sub'];
+ $mode = $data['mode'];
+
+ assert($sub instanceof HubSub);
+ assert($mode === 'subscribe' || $mode === 'unsubscribe');
+
+ common_log(LOG_INFO, __METHOD__ . ": $mode $sub->callback $sub->topic");
+ try {
+ $sub->verify($mode);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Failed PuSH $mode verify to $sub->callback for $sub->topic: " .
+ $e->getMessage());
+ // @fixme schedule retry?
+ // @fixme just kill it?
+ }
+
+ return true;
+ }
+}
+
diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php
new file mode 100644
index 000000000..8c77222a6
--- /dev/null
+++ b/plugins/OStatus/lib/salmon.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+class Salmon
+{
+ public function post($endpoint_uri, $xml)
+ {
+ if (empty($endpoint_uri)) {
+ return FALSE;
+ }
+
+ $headers = array('Content-type: application/atom+xml');
+
+ try {
+ $client = new HTTPClient();
+ $client->setBody($xml);
+ $response = $client->post($endpoint_uri, $headers);
+ } catch (HTTP_Request2_Exception $e) {
+ return false;
+ }
+ if ($response->getStatus() != 200) {
+ return false;
+ }
+
+ }
+
+ public function createMagicEnv($text, $userid)
+ {
+
+
+ }
+
+
+ public function verifyMagicEnv($env)
+ {
+
+
+ }
+}
diff --git a/plugins/OStatus/lib/webfinger.php b/plugins/OStatus/lib/webfinger.php
new file mode 100644
index 000000000..417d54904
--- /dev/null
+++ b/plugins/OStatus/lib/webfinger.php
@@ -0,0 +1,143 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+
+define('WEBFINGER_SERVICE_REL_VALUE', 'lrdd');
+
+/**
+ * Implement the webfinger protocol.
+ */
+class Webfinger
+{
+ /**
+ * Perform a webfinger lookup given an account.
+ */
+ public function lookup($id)
+ {
+ $id = $this->normalize($id);
+ list($name, $domain) = explode('@', $id);
+
+ $links = $this->getServiceLinks($domain);
+ if (!$links) {
+ return false;
+ }
+
+ $services = array();
+ foreach ($links as $link) {
+ if ($link['template']) {
+ return $this->getServiceDescription($link['template'], $id);
+ }
+ if ($link['href']) {
+ return $this->getServiceDescription($link['href'], $id);
+ }
+ }
+ }
+
+ /**
+ * Normalize an account ID
+ */
+ function normalize($id)
+ {
+ if (substr($id, 0, 7) == 'acct://') {
+ return substr($id, 7);
+ } else if (substr($id, 0, 5) == 'acct:') {
+ return substr($id, 5);
+ }
+
+ return $id;
+ }
+
+ function getServiceLinks($domain)
+ {
+ $url = 'http://'. $domain .'/.well-known/host-meta';
+ $content = $this->fetchURL($url);
+ if (empty($content)) {
+ common_log(LOG_DEBUG, 'Error fetching host-meta');
+ return false;
+ }
+ $result = XRD::parse($content);
+
+ // Ensure that the host == domain (spec may include signing later)
+ if ($result->host != $domain) {
+ return false;
+ }
+
+ $links = array();
+ foreach ($result->links as $link) {
+ if ($link['rel'] == WEBFINGER_SERVICE_REL_VALUE) {
+ $links[] = $link;
+ }
+
+ }
+ return $links;
+ }
+
+ function getServiceDescription($template, $id)
+ {
+ $url = $this->applyTemplate($template, 'acct:' . $id);
+
+ $content = $this->fetchURL($url);
+
+ return XRD::parse($content);
+ }
+
+ function fetchURL($url)
+ {
+ try {
+ $client = new HTTPClient();
+ $response = $client->get($url);
+ } catch (HTTP_Request2_Exception $e) {
+ return false;
+ }
+
+ if ($response->getStatus() != 200) {
+ return false;
+ }
+
+ return $response->getBody();
+ }
+
+ function applyTemplate($template, $id)
+ {
+ $template = str_replace('{uri}', urlencode($id), $template);
+
+ return $template;
+ }
+
+ function getHostMeta($domain, $template) {
+ $xrd = new XRD();
+ $xrd->host = $domain;
+ $xrd->links[] = array('rel' => 'lrdd',
+ 'template' => $template,
+ 'title' => array('Resource Descriptor'));
+
+ return $xrd->toXML();
+ }
+}
+
+
diff --git a/plugins/OStatus/lib/xrd.php b/plugins/OStatus/lib/xrd.php
new file mode 100644
index 000000000..16d27f8eb
--- /dev/null
+++ b/plugins/OStatus/lib/xrd.php
@@ -0,0 +1,183 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+
+
+class XRD
+{
+ const XML_NS = 'http://www.w3.org/2000/xmlns/';
+
+ const XRD_NS = 'http://docs.oasis-open.org/ns/xri/xrd-1.0';
+
+ const HOST_META_NS = 'http://host-meta.net/xrd/1.0';
+
+ public $expires;
+
+ public $subject;
+
+ public $host;
+
+ public $alias = array();
+
+ public $types = array();
+
+ public $links = array();
+
+ public static function parse($xml)
+ {
+ $xrd = new XRD();
+
+ $dom = new DOMDocument();
+ $dom->loadXML($xml);
+ $xrd_element = $dom->getElementsByTagName('XRD')->item(0);
+
+ // Check for host-meta host
+ $host = $xrd_element->getElementsByTagName('Host')->item(0)->nodeValue;
+ if ($host) {
+ $xrd->host = $host;
+ }
+
+ // Loop through other elements
+ foreach ($xrd_element->childNodes as $node) {
+ switch ($node->tagName) {
+ case 'Expires':
+ $xrd->expires = $node->nodeValue;
+ break;
+ case 'Subject':
+ $xrd->subject = $node->nodeValue;
+ break;
+
+ case 'Alias':
+ $xrd->alias[] = $node->nodeValue;
+ break;
+
+ case 'Link':
+ $xrd->links[] = $xrd->parseLink($node);
+ break;
+
+ case 'Type':
+ $xrd->types[] = $xrd->parseType($node);
+ break;
+
+ }
+ }
+ return $xrd;
+ }
+
+ public function toXML()
+ {
+ $dom = new DOMDocument('1.0', 'UTF-8');
+ $dom->formatOutput = true;
+
+ $xrd_dom = $dom->createElementNS(XRD::XRD_NS, 'XRD');
+ $dom->appendChild($xrd_dom);
+
+ if ($this->host) {
+ $host_dom = $dom->createElement('hm:Host', $this->host);
+ $xrd_dom->setAttributeNS(XRD::XML_NS, 'xmlns:hm', XRD::HOST_META_NS);
+ $xrd_dom->appendChild($host_dom);
+ }
+
+ if ($this->expires) {
+ $expires_dom = $dom->createElement('Expires', $this->expires);
+ $xrd_dom->appendChild($expires_dom);
+ }
+
+ if ($this->subject) {
+ $subject_dom = $dom->createElement('Subject', $this->subject);
+ $xrd_dom->appendChild($subject_dom);
+ }
+
+ foreach ($this->alias as $alias) {
+ $alias_dom = $dom->createElement('Alias', $alias);
+ $xrd_dom->appendChild($alias_dom);
+ }
+
+ foreach ($this->types as $type) {
+ $type_dom = $dom->createElement('Type', $type);
+ $xrd_dom->appendChild($type_dom);
+ }
+
+ foreach ($this->links as $link) {
+ $link_dom = $this->saveLink($dom, $link);
+ $xrd_dom->appendChild($link_dom);
+ }
+
+ return $dom->saveXML();
+ }
+
+ function parseType($element)
+ {
+ return array();
+ }
+
+ function parseLink($element)
+ {
+ $link = array();
+ $link['rel'] = $element->getAttribute('rel');
+ $link['type'] = $element->getAttribute('type');
+ $link['href'] = $element->getAttribute('href');
+ $link['template'] = $element->getAttribute('template');
+ foreach ($element->childNodes as $node) {
+ switch($node->tagName) {
+ case 'Title':
+ $link['title'][] = $node->nodeValue;
+ }
+ }
+
+ return $link;
+ }
+
+ function saveLink($doc, $link)
+ {
+ $link_element = $doc->createElement('Link');
+ if ($link['rel']) {
+ $link_element->setAttribute('rel', $link['rel']);
+ }
+ if ($link['type']) {
+ $link_element->setAttribute('type', $link['type']);
+ }
+ if ($link['href']) {
+ $link_element->setAttribute('href', $link['href']);
+ }
+ if ($link['template']) {
+ $link_element->setAttribute('template', $link['template']);
+ }
+
+ if (is_array($link['title'])) {
+ foreach($link['title'] as $title) {
+ $title = $doc->createElement('Title', $title);
+ $link_element->appendChild($title);
+ }
+ }
+
+
+ return $link_element;
+ }
+}
+
diff --git a/plugins/FeedSub/locale/FeedSub.po b/plugins/OStatus/locale/OStatus.po
index dedc018e3..dedc018e3 100644
--- a/plugins/FeedSub/locale/FeedSub.po
+++ b/plugins/OStatus/locale/OStatus.po
diff --git a/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
index f17dfa50a..f17dfa50a 100644
--- a/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po
+++ b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
diff --git a/plugins/FeedSub/tests/FeedDiscoveryTest.php b/plugins/OStatus/tests/FeedDiscoveryTest.php
index 1c5249701..1c5249701 100644
--- a/plugins/FeedSub/tests/FeedDiscoveryTest.php
+++ b/plugins/OStatus/tests/FeedDiscoveryTest.php
diff --git a/plugins/FeedSub/tests/FeedMungerTest.php b/plugins/OStatus/tests/FeedMungerTest.php
index 0ce24c9fb..0ce24c9fb 100644
--- a/plugins/FeedSub/tests/FeedMungerTest.php
+++ b/plugins/OStatus/tests/FeedMungerTest.php
diff --git a/plugins/FeedSub/tests/gettext-speedtest.php b/plugins/OStatus/tests/gettext-speedtest.php
index 8bbdf5e89..8bbdf5e89 100644
--- a/plugins/FeedSub/tests/gettext-speedtest.php
+++ b/plugins/OStatus/tests/gettext-speedtest.php
diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js
index ab548958a..0f7a680d7 100644
--- a/plugins/Realtime/realtimeupdate.js
+++ b/plugins/Realtime/realtimeupdate.js
@@ -209,10 +209,10 @@ console.log(data);
var rf;
rf = "<form id=\"repeat-"+id+"\" class=\"form_repeat\" method=\"post\" action=\""+RealtimeUpdate._repeaturl+"\">"+
"<fieldset>"+
- "<legend>Favor this notice</legend>"+
+ "<legend>Repeat this notice?</legend>"+
"<input name=\"token-"+id+"\" type=\"hidden\" id=\"token-"+id+"\" value=\""+session_key+"\"/>"+
- "<input name=\"notice\" type=\"hidden\" id=\"notice-n"+id+"\" value=\""+id+"\"/>"+
- "<input type=\"submit\" id=\"repeat-submit-"+id+"\" name=\"repeat-submit-"+id+"\" class=\"submit\" value=\"Favor\" title=\"Repeat this notice\"/>"+
+ "<input name=\"notice\" type=\"hidden\" id=\"notice-"+id+"\" value=\""+id+"\"/>"+
+ "<input type=\"submit\" id=\"repeat-submit-"+id+"\" name=\"repeat-submit-"+id+"\" class=\"submit\" value=\"Yes\" title=\"Repeat this notice\"/>"+
"</fieldset>"+
"</form>";
diff --git a/scripts/decache.php b/scripts/decache.php
index 7cabd78ad..094bdb5aa 100644
--- a/scripts/decache.php
+++ b/scripts/decache.php
@@ -24,6 +24,8 @@ $helptext = <<<ENDOFHELP
USAGE: decache.php <table> <id> [<column>]
Clears the cache for the object in table <table> with id <id>
If <column> is specified, use that instead of 'id'
+
+
ENDOFHELP;
require_once INSTALLDIR.'/scripts/commandline.inc';
@@ -43,8 +45,10 @@ if (count($args) > 2) {
$object = Memcached_DataObject::staticGet($table, $column, $id);
if (!$object) {
- print "No such '$table' with $column = '$id'.\n";
- exit(1);
+ print "No such '$table' with $column = '$id'; it's possible some cache keys won't be cleared properly.\n";
+ $class = ucfirst($table);
+ $object = new $class();
+ $object->column = $id;
}
$result = $object->decache();
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 8490fb580..3218276a6 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -1104,25 +1104,22 @@ left:0;
.dialogbox {
position:absolute;
-top:-4px;
-right:29px;
+top:-1px;
+right:-1px;
z-index:9;
-min-width:199px;
float:none;
-background-color:#FFF;
padding:11px;
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
border-style:solid;
border-width:1px;
-border-color:#DDDDDD;
--moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
}
.dialogbox legend {
display:block !important;
margin-right:18px;
+margin-bottom:18px;
}
.dialogbox button.close {
@@ -1131,11 +1128,22 @@ right:3px;
top:3px;
}
+.dialogbox .form_guide {
+font-weight:normal;
+padding:0;
+}
+
.dialogbox .submit_dialogbox {
font-weight:bold;
text-indent:0;
min-width:46px;
}
+.dialogbox input {
+padding-left:4px;
+}
+.dialogbox fieldset {
+margin-bottom:0;
+}
#wrap form.processing input.submit,
.entity_actions a.processing,
@@ -1145,6 +1153,12 @@ outline:none;
text-indent:-9999px;
}
+.form_repeat.dialogbox {
+top:-4px;
+right:29px;
+min-width:199px;
+}
+
.notice-options {
position:relative;
font-size:0.95em;
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index 82eb13531..a2f101342 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -30,7 +30,9 @@ border-radius:4px;
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
-input, textarea, select {
+input, textarea, select,
+.entity_actions .dialogbox input,
+.mark-top {
border-color:#AAAAAA;
}
@@ -46,7 +48,8 @@ box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
.pagination .nav_prev a,
.pagination .nav_next a,
.form_settings fieldset fieldset,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.dialogbox {
border-color:#DDDDDD;
}
@@ -78,7 +81,8 @@ background-color:transparent;
input:focus, textarea:focus, select:focus,
.form_notice.warning #notice_data-text,
.form_notice.warning #notice_text-count,
-.form_settings .form_note {
+.form_settings .form_note,
+.entity_actions .dialogbox .form_data input:focus {
border-color:#9BB43E;
}
input.submit {
@@ -133,9 +137,6 @@ color:#002FA7;
#content tbody tr {
border-top-color:#C8D1D5;
}
-.mark-top {
-border-color:#AAAAAA;
-}
#aside_primary {
background-color:#C8D1D5;
@@ -144,7 +145,9 @@ background-color:#C8D1D5;
#notice_text-count {
color:#333333;
}
-.form_notice.warning #notice_text-count {
+.form_notice.warning #notice_text-count,
+.dialogbox,
+.entity_actions .dialogbox input {
color:#000000;
}
.form_notice label[for=notice_data-attach] {
@@ -221,7 +224,8 @@ border-color:transparent;
#content,
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.dialogbox {
background-color:#FFFFFF;
}
@@ -308,7 +312,8 @@ background-position: 5px -718px;
background-position: 5px -852px;
}
.entity_send-a-message .form_notice,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.dialogbox {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index 44ae4953b..e21404745 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -30,7 +30,9 @@ border-radius:4px;
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
-input, textarea, select {
+input, textarea, select,
+.entity_actions .dialogbox input,
+.mark-top {
border-color:#AAAAAA;
}
@@ -46,7 +48,8 @@ box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
.pagination .nav_prev a,
.pagination .nav_next a,
.form_settings fieldset fieldset,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.dialogbox {
border-color:#DDDDDD;
}
@@ -88,6 +91,7 @@ color:#FFFFFF;
border-color:transparent;
text-shadow:none;
}
+
.dialogbox .submit_dialogbox,
input.submit,
.form_notice input.submit {
@@ -133,9 +137,6 @@ color:#002FA7;
#content tbody tr {
border-top-color:#CEE1E9;
}
-.mark-top {
-border-color:#AAAAAA;
-}
#aside_primary {
background-color:#CEE1E9;
@@ -144,7 +145,9 @@ background-color:#CEE1E9;
#notice_text-count {
color:#333333;
}
-.form_notice.warning #notice_text-count {
+.form_notice.warning #notice_text-count,
+.dialogbox,
+.entity_actions .dialogbox input {
color:#000000;
}
.form_notice label[for=notice_data-attach] {
@@ -221,7 +224,8 @@ border-color:transparent;
#content,
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.dialogbox {
background-color:#FFFFFF;
}
@@ -307,7 +311,8 @@ background-position: 5px -718px;
background-position: 5px -852px;
}
.entity_send-a-message .form_notice,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.dialogbox {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);