]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch '0.9.x' into 1.0.x
authorCraig Andrews <candrews@integralblue.com>
Tue, 16 Feb 2010 15:25:57 +0000 (10:25 -0500)
committerCraig Andrews <candrews@integralblue.com>
Tue, 16 Feb 2010 15:25:57 +0000 (10:25 -0500)
Conflicts:
lib/queuemanager.php

226 files changed:
actions/apiaccountverifycredentials.php
actions/apistatusnetconfig.php
actions/apitimelinefavorites.php
actions/apitimelinefriends.php
actions/apitimelinegroup.php
actions/apitimelinehome.php
actions/apitimelinementions.php
actions/apitimelinepublic.php
actions/apitimelineretweetsofme.php
actions/apitimelinetag.php
actions/apitimelineuser.php
actions/editapplication.php
actions/favorited.php
actions/groupmembers.php
actions/makeadmin.php
actions/newapplication.php
actions/publictagcloud.php
actions/register.php
actions/showapplication.php
actions/showgroup.php
actions/showstream.php
actions/userauthorization.php
classes/Inbox.php
classes/Memcached_DataObject.php
classes/Nonce.php
classes/Notice.php
classes/Profile.php
classes/User.php
classes/User_group.php
classes/statusnet.ini
classes/statusnet.links.ini
db/statusnet.sql
js/util.js
lib/api.php
lib/apiauth.php
lib/atom10entry.php [new file with mode: 0644]
lib/atom10feed.php [new file with mode: 0644]
lib/atomnoticefeed.php [new file with mode: 0644]
lib/cache.php
lib/default.php
lib/error.php
lib/grouptagcloudsection.php
lib/httpclient.php
lib/mysqlschema.php
lib/oauthclient.php
lib/oauthstore.php
lib/personaltagcloudsection.php
lib/popularnoticesection.php
lib/queuemanager.php
lib/right.php
lib/spawningdaemon.php
lib/statusnet.php
lib/stompqueuemanager.php
lib/util.php
locale/ar/LC_MESSAGES/statusnet.po
locale/arz/LC_MESSAGES/statusnet.po
locale/bg/LC_MESSAGES/statusnet.po
locale/ca/LC_MESSAGES/statusnet.po
locale/cs/LC_MESSAGES/statusnet.po
locale/de/LC_MESSAGES/statusnet.po
locale/el/LC_MESSAGES/statusnet.po
locale/en_GB/LC_MESSAGES/statusnet.po
locale/es/LC_MESSAGES/statusnet.po
locale/fa/LC_MESSAGES/statusnet.po
locale/fi/LC_MESSAGES/statusnet.po
locale/fr/LC_MESSAGES/statusnet.po
locale/ga/LC_MESSAGES/statusnet.po
locale/he/LC_MESSAGES/statusnet.po
locale/hsb/LC_MESSAGES/statusnet.po
locale/ia/LC_MESSAGES/statusnet.po
locale/is/LC_MESSAGES/statusnet.po
locale/it/LC_MESSAGES/statusnet.po
locale/ja/LC_MESSAGES/statusnet.po
locale/ko/LC_MESSAGES/statusnet.po
locale/mk/LC_MESSAGES/statusnet.po
locale/nb/LC_MESSAGES/statusnet.po
locale/nl/LC_MESSAGES/statusnet.po
locale/nn/LC_MESSAGES/statusnet.po
locale/pl/LC_MESSAGES/statusnet.po
locale/pt/LC_MESSAGES/statusnet.po
locale/pt_BR/LC_MESSAGES/statusnet.po
locale/ru/LC_MESSAGES/statusnet.po
locale/statusnet.po
locale/sv/LC_MESSAGES/statusnet.po
locale/te/LC_MESSAGES/statusnet.po
locale/tr/LC_MESSAGES/statusnet.po
locale/uk/LC_MESSAGES/statusnet.po
locale/vi/LC_MESSAGES/statusnet.po
locale/zh_CN/LC_MESSAGES/statusnet.po
locale/zh_TW/LC_MESSAGES/statusnet.po
plugins/FeedSub/FeedSubPlugin.php [deleted file]
plugins/FeedSub/README [deleted file]
plugins/FeedSub/actions/feedsubcallback.php [deleted file]
plugins/FeedSub/actions/feedsubsettings.php [deleted file]
plugins/FeedSub/extlib/README [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/Exception.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/Parser/Type.php [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/delicious.feed [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/flickr.feed [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/hoder.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml [deleted file]
plugins/FeedSub/extlib/XML/Feed/samples/technorati.feed [deleted file]
plugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc [deleted file]
plugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc [deleted file]
plugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc [deleted file]
plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch [deleted file]
plugins/FeedSub/feeddiscovery.php [deleted file]
plugins/FeedSub/feedinfo.php [deleted file]
plugins/FeedSub/feedinfo.sql [deleted file]
plugins/FeedSub/feedmunger.php [deleted file]
plugins/FeedSub/images/24px-Feed-icon.svg.png [deleted file]
plugins/FeedSub/images/48px-Feed-icon.svg.png [deleted file]
plugins/FeedSub/images/96px-Feed-icon.svg.png [deleted file]
plugins/FeedSub/images/README [deleted file]
plugins/FeedSub/locale/FeedSub.po [deleted file]
plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po [deleted file]
plugins/FeedSub/tests/FeedDiscoveryTest.php [deleted file]
plugins/FeedSub/tests/FeedMungerTest.php [deleted file]
plugins/FeedSub/tests/gettext-speedtest.php [deleted file]
plugins/MemcachePlugin.php
plugins/MobileProfile/MobileProfilePlugin.php
plugins/MobileProfile/mp-screen.css
plugins/OStatus/OStatusPlugin.php [new file with mode: 0644]
plugins/OStatus/README [new file with mode: 0644]
plugins/OStatus/actions/feedsubsettings.php [new file with mode: 0644]
plugins/OStatus/actions/hostmeta.php [new file with mode: 0644]
plugins/OStatus/actions/ostatusinit.php [new file with mode: 0644]
plugins/OStatus/actions/ostatussub.php [new file with mode: 0644]
plugins/OStatus/actions/pushcallback.php [new file with mode: 0644]
plugins/OStatus/actions/pushhub.php [new file with mode: 0644]
plugins/OStatus/actions/salmon.php [new file with mode: 0644]
plugins/OStatus/actions/webfinger.php [new file with mode: 0644]
plugins/OStatus/classes/HubSub.php [new file with mode: 0644]
plugins/OStatus/classes/Ostatus_profile.php [new file with mode: 0644]
plugins/OStatus/extlib/README [new file with mode: 0644]
plugins/OStatus/extlib/XML/Feed/Parser.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/Atom.php [new file with mode: 0644]
plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/Exception.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php [new file with mode: 0644]
plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/Parser/Type.php [new file with mode: 0644]
plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/delicious.feed [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/flickr.feed [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/hoder.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/samples/technorati.feed [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc [new file with mode: 0755]
plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc [new file with mode: 0755]
plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch [new file with mode: 0644]
plugins/OStatus/images/24px-Feed-icon.svg.png [new file with mode: 0644]
plugins/OStatus/images/48px-Feed-icon.svg.png [new file with mode: 0644]
plugins/OStatus/images/96px-Feed-icon.svg.png [new file with mode: 0644]
plugins/OStatus/images/README [new file with mode: 0644]
plugins/OStatus/lib/activity.php [new file with mode: 0644]
plugins/OStatus/lib/feeddiscovery.php [new file with mode: 0644]
plugins/OStatus/lib/feedmunger.php [new file with mode: 0644]
plugins/OStatus/lib/hubdistribqueuehandler.php [new file with mode: 0644]
plugins/OStatus/lib/huboutqueuehandler.php [new file with mode: 0644]
plugins/OStatus/lib/hubverifyqueuehandler.php [new file with mode: 0644]
plugins/OStatus/lib/salmon.php [new file with mode: 0644]
plugins/OStatus/lib/webfinger.php [new file with mode: 0644]
plugins/OStatus/lib/xrd.php [new file with mode: 0644]
plugins/OStatus/locale/OStatus.po [new file with mode: 0644]
plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po [new file with mode: 0644]
plugins/OStatus/tests/FeedDiscoveryTest.php [new file with mode: 0644]
plugins/OStatus/tests/FeedMungerTest.php [new file with mode: 0644]
plugins/OStatus/tests/gettext-speedtest.php [new file with mode: 0644]
plugins/Realtime/realtimeupdate.js
plugins/TwitterBridge/daemons/twitterstatusfetcher.php
plugins/TwitterBridge/twitter.php
plugins/TwitterBridge/twitterauthorization.php
plugins/TwitterBridge/twitteroauthclient.php
scripts/clearcache.php
scripts/decache.php
scripts/setup_status_network.sh
scripts/showcache.php
scripts/updateprofileurl.php [new file with mode: 0644]
theme/base/css/display.css
theme/base/images/icons/icons-01.gif
theme/base/images/icons/twotone/green/against.gif [new file with mode: 0644]
theme/base/images/icons/twotone/green/checkmark.gif [new file with mode: 0644]
theme/default/css/display.css
theme/identica/css/display.css

index 1095d5162634f312772ce78e4e533dc2a2eaf00a..ea61a3205945c12f3c10afc62ecbef0e31c3e08b 100644 (file)
@@ -66,18 +66,21 @@ class ApiAccountVerifyCredentialsAction extends ApiAuthAction
     {
         parent::handle($args);
 
-        switch ($this->format) {
-        case 'xml':
-        case 'json':
-            $args['id'] = $this->auth_user->id;
-            $action_obj = new ApiUserShowAction();
-            if ($action_obj->prepare($args)) {
-                $action_obj->handle($args);
-            }
-            break;
-        default:
-            header('Content-Type: text/html; charset=utf-8');
-            print 'Authorized';
+        if (!in_array($this->format, array('xml', 'json'))) {
+            $this->clientError(_('API method not found.'), $code = 404);
+            return;
+        }
+
+        $twitter_user = $this->twitterUserArray($this->auth_user->getProfile(), true);
+
+        if ($this->format == 'xml') {
+            $this->initDocument('xml');
+            $this->showTwitterXmlUser($twitter_user);
+            $this->endDocument('xml');
+        } elseif ($this->format == 'json') {
+            $this->initDocument('json');
+            $this->showJsonObjects($twitter_user);
+            $this->endDocument('json');
         }
 
     }
@@ -86,14 +89,14 @@ class ApiAccountVerifyCredentialsAction extends ApiAuthAction
      * Is this action read only?
      *
      * @param array $args other arguments
-     * 
+     *
      * @return boolean true
      *
      **/
-    
+
     function isReadOnly($args)
     {
         return true;
     }
-    
+
 }
index dc1ab8685b8a05dee7db140b0b0e3920b0c8e26a..0345a9bc0781e7cb986d8ac9207cb1eda53672d4 100644 (file)
@@ -52,13 +52,17 @@ require_once INSTALLDIR . '/lib/api.php';
 class ApiStatusnetConfigAction extends ApiAction
 {
     var $keys = array(
-        'site' => array('name', 'server', 'theme', 'path', 'fancy', 'language',
-                        'email', 'broughtby', 'broughtbyurl', 'closed',
-                        'inviteonly', 'private'),
-        'license' => array('url', 'title', 'image'),
+        'site' => array('name', 'server', 'theme', 'path', 'logo', 'fancy', 'language',
+                        'email', 'broughtby', 'broughtbyurl', 'timezone', 'closed',
+                        'inviteonly', 'private', 'textlimit', 'ssl', 'sslserver', 'shorturllength'),
+        'license' => array('type', 'owner', 'url', 'title', 'image'),
         'nickname' => array('featured'),
+        'profile' => array('biolimit'),
+        'group' => array('desclimit'),
+        'notice' => array('contentlimit'),
         'throttle' => array('enabled', 'count', 'timespan'),
-        'xmpp' => array('enabled', 'server', 'user')
+        'xmpp' => array('enabled', 'server', 'port', 'user'),
+        'integration' => array('source')
     );
 
     /**
index 1027d97d440047f77c3401b9b446b070a974137f..f7f900ddfb5d6382f70c4a1752de799f2473038d 100644 (file)
@@ -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);
index 4e3827baea61a5bf9f1c947e8f2cad55b86d7f08..0af04fe4fb2cef71c07b1ce90528e4016806a349 100644 (file)
@@ -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);
index af414c680403e557361d15ef3c9e1b554353bee4..45962fa76fefa3a08f0c3e22dbee1154e96326a9 100644 (file)
@@ -109,38 +109,70 @@ 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);
index 828eae6cf6f912382f350afe2fe17ba716041bc9..ae41680702fd6484349eba4ff178edd589abdc1d 100644 (file)
@@ -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);
index 9dc2162cc45fa738e8c368c0b8841f19ef3f677a..d2e31d0bdd095fe40e592b98647dd14ee50a5689 100644 (file)
@@ -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);
index 3f4a46c0fa16e2bc6b55483d32304cce6e0807da..c1fa72a3ee372f72e944931f86c6480bff17aabc 100644 (file)
@@ -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()) {
index e4b09e9bdaf334b860022482d5d1e0bac6b41bd9..26706a75e7650c1c65717bd79237676e635d36b5 100644 (file)
@@ -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:
index 1427d23b6a45d70e0f93f26292f11d25b8c4f1d1..5b6ded4c048d6b08fe77838b2ced98b674484e51 100644 (file)
@@ -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,22 +113,51 @@ 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);
index 830b16941dc8898ccfc0453ca23a2eb384203d85..d20bb0d2023db66ea908de0a4681a1a1891f7379 100644 (file)
@@ -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);
index 029b622e84b3c6710a22fed339f48867a505256a..64cf0a5745d134fcceeb7b214844b45dc86111ec 100644 (file)
@@ -266,7 +266,7 @@ class EditApplicationAction extends OwnerDesignAction
     /**
      * Does the app name already exist?
      *
-     * Checks the DB to see someone has already registered and app
+     * Checks the DB to see someone has already registered an app
      * with the same name.
      *
      * @param string $name app name to check
@@ -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;
index 9ffa5b84454093fde32b98460751b60bbab32745..d8980440d17529a73db33990f72fed90f740b247 100644 (file)
@@ -186,10 +186,13 @@ class FavoritedAction extends Action
     function showContent()
     {
         $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
+        $cutoff = sprintf("fave.modified > '%s'",
+                          common_sql_date(time() - common_config('popular', 'cutoff')));
 
         $qry = 'SELECT notice.*, '.
           $weightexpr . ' as weight ' .
           'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
+          "WHERE $cutoff " .
           'GROUP BY id,profile_id,uri,content,rendered,url,created,notice.modified,reply_to,is_local,source,notice.conversation ' .
           'ORDER BY weight DESC';
 
index 0f47c268dd30eda6bd4094bc7acbca56c3259031..f16e972a4194a6eee1a0fd60e2c4fad70881b36d 100644 (file)
@@ -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,
index 9ad7d6e7c821a247cdc1961e1cbed593dc785991..f19348648d8700f50b0ef8955419dbd7a0b24ecf 100644 (file)
@@ -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;
         }
index ba1cca5c928ab6704a8b283f450b261972999574..0f819b3499881795e3ce597fd1559846875f7f15 100644 (file)
@@ -279,7 +279,7 @@ class NewApplicationAction extends OwnerDesignAction
     /**
      * Does the app name already exist?
      *
-     * Checks the DB to see someone has already registered and app
+     * Checks the DB to see someone has already registered an app
      * with the same name.
      *
      * @param string $name app name to check
@@ -290,7 +290,7 @@ class NewApplicationAction extends OwnerDesignAction
     function nameExists($name)
     {
         $app = Oauth_application::staticGet('name', $name);
-        return ($app !== false);
+        return !empty($app);
     }
 
 }
index 9e4478dbb13165e1e908e9dbc02114f137e496ee..9993b2d3fde0b3473a84dbdb8e0c17151d0902cb 100644 (file)
@@ -106,7 +106,10 @@ class PublictagcloudAction extends Action
         #Add the aggregated columns...
         $tags->selectAdd('max(notice_id) as last_notice_id');
         $calc = common_sql_weight('created', common_config('tag', 'dropoff'));
+        $cutoff = sprintf("notice_tag.created > '%s'",
+                          common_sql_date(time() - common_config('tag', 'cutoff')));
         $tags->selectAdd($calc . ' as weight');
+        $tags->addWhere($cutoff);
         $tags->groupBy('tag');
         $tags->orderBy('weight DESC');
 
index 6981373467636ba77414e82e8c0c7afb7aaf46a6..ccab76cf0193af51e161624f054e8b05681292c6 100644 (file)
@@ -280,7 +280,7 @@ class RegisterAction extends Action
     function nicknameExists($nickname)
     {
         $user = User::staticGet('nickname', $nickname);
-        return ($user !== false);
+        return is_object($user);
     }
 
     /**
@@ -300,7 +300,7 @@ class RegisterAction extends Action
             return false;
         }
         $user = User::staticGet('email', $email);
-        return ($user !== false);
+        return is_object($user);
     }
 
     // overrrided to add entry-title class
index 020d62480ad6566c234dad97e2868ef526642235..fa44844816041a6622e8e2e3defaa6327552f4ae 100644 (file)
@@ -149,7 +149,6 @@ class ShowApplicationAction extends OwnerDesignAction
 
     function showContent()
     {
-
         $cur = common_current_user();
 
         $consumer = $this->application->getConsumer();
@@ -229,7 +228,13 @@ class ShowApplicationAction extends OwnerDesignAction
                                          array('id' => $this->application->id))));
         $this->elementStart('fieldset');
         $this->hidden('token', common_session_token());
-        $this->submit('reset', _('Reset key & secret'));
+
+        $this->element('input', array('type' => 'submit',
+                                      'id' => 'reset',
+                                      'name' => 'reset',
+                                      'class' => 'submit',
+                                      'value' => _('Reset key & secret'),
+                                      'onClick' => 'return confirmReset()'));
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
         $this->elementEnd('li');
@@ -291,14 +296,53 @@ class ShowApplicationAction extends OwnerDesignAction
         $this->elementEnd('p');
     }
 
+    /**
+     * Add a confirm script for Consumer key/secret reset
+     *
+     * @return void
+     */
+
+    function showScripts()
+    {
+        parent::showScripts();
+
+        $msg = _('Are you sure you want to reset your consumer key and secret?');
+
+        $js  = 'function confirmReset() { ';
+        $js .= '    var agree = confirm("' . $msg . '"); ';
+        $js .= '    return agree;';
+        $js .= '}';
+
+        $this->inlineScript($js);
+    }
+
+    /**
+     * Reset an application's Consumer key and secret
+     *
+     * XXX: Should this be moved to its own page with a confirm?
+     *
+     */
+
     function resetKey()
     {
         $this->application->query('BEGIN');
 
+        $oauser = new Oauth_application_user();
+        $oauser->application_id = $this->application->id;
+        $result = $oauser->delete();
+
+        if ($result === false) {
+            common_log_db_error($oauser, 'DELETE', __FILE__);
+            $this->success = false;
+            $this->msg = ('Unable to reset consumer key and secret.');
+            $this->showPage();
+            return;
+        }
+
         $consumer = $this->application->getConsumer();
         $result = $consumer->delete();
 
-        if (!$result) {
+        if ($result === false) {
             common_log_db_error($consumer, 'DELETE', __FILE__);
             $this->success = false;
             $this->msg = ('Unable to reset consumer key and secret.');
@@ -310,7 +354,7 @@ class ShowApplicationAction extends OwnerDesignAction
 
         $result = $consumer->insert();
 
-        if (!$result) {
+        if (empty($result)) {
             common_log_db_error($consumer, 'INSERT', __FILE__);
             $this->application->query('ROLLBACK');
             $this->success = false;
@@ -323,7 +367,7 @@ class ShowApplicationAction extends OwnerDesignAction
         $this->application->consumer_key = $consumer->consumer_key;
         $result = $this->application->update($orig);
 
-        if (!$result) {
+        if ($result === false) {
             common_log_db_error($application, 'UPDATE', __FILE__);
             $this->application->query('ROLLBACK');
             $this->success = false;
index 8042a4951339a26f7aebaf4ad56f2e05de3a386b..eb12389029a096dd0373ae7ed523ddc517092d62 100644 (file)
@@ -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,
index 9586761045d8cd50d5aaeaceea7cbea2ac887e0c..5a9add36ce14ef1caae088324000d94beb2999ad 100644 (file)
@@ -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)),
index 4321f1302e0ca6735c8307128fe083a00e616946..7f71c60dbe64441adc9515b1ab106362089ce897 100644 (file)
@@ -127,10 +127,10 @@ class UserauthorizationAction extends Action
         $location = $params->getLocation();
         $avatar   = $params->getAvatarURL();
 
-        $this->elementStart('div', array('class' => 'profile'));
         $this->elementStart('div', 'entity_profile vcard');
-        $this->elementStart('a', array('href' => $profile,
-                                            'class' => 'url'));
+        $this->elementStart('dl', 'entity_depiction');
+        $this->element('dt', null, _('Photo'));
+        $this->elementStart('dd');
         if ($avatar) {
             $this->element('img', array('src' => $avatar,
                                         'class' => 'photo avatar',
@@ -138,11 +138,19 @@ class UserauthorizationAction extends Action
                                         'height' => AVATAR_PROFILE_SIZE,
                                         'alt' => $nickname));
         }
+        $this->elementEnd('dd');
+        $this->elementEnd('dl');
+
+        $this->elementStart('dl', 'entity_nickname');
+        $this->element('dt', null, _('Nickname'));
+        $this->elementStart('dd');
         $hasFN = ($fullname !== '') ? 'nickname' : 'fn nickname';
-        $this->elementStart('span', $hasFN);
+        $this->elementStart('a', array('href' => $profile,
+                                       'class' => 'url '.$hasFN));
         $this->raw($nickname);
-        $this->elementEnd('span');
         $this->elementEnd('a');
+        $this->elementEnd('dd');
+        $this->elementEnd('dl');
 
         if (!is_null($fullname)) {
             $this->elementStart('dl', 'entity_fn');
@@ -214,7 +222,6 @@ class UserauthorizationAction extends Action
         $this->elementEnd('li');
         $this->elementEnd('ul');
         $this->elementEnd('div');
-        $this->elementEnd('div');
     }
 
     function sendAuthorization()
@@ -350,4 +357,4 @@ class UserauthorizationAction extends Action
             }
         }
     }
-}
\ No newline at end of file
+}
index 26b27d2b58f71f47c2e6aa816a6cf668ab46cc3e..be62611a16504416675d474e6d1920d6d6080273 100644 (file)
@@ -32,6 +32,7 @@ require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
 class Inbox extends Memcached_DataObject
 {
     const BOXCAR = 128;
+    const MAX_NOTICES = 1024;
 
     ###START_AUTOCODE
     /* the code below is auto generated do not remove the above tag */
@@ -81,7 +82,7 @@ class Inbox extends Memcached_DataObject
         $ni->selectAdd();
         $ni->selectAdd('notice_id');
         $ni->orderBy('notice_id DESC');
-        $ni->limit(0, 1024);
+        $ni->limit(0, self::MAX_NOTICES);
 
         if ($ni->find()) {
             while($ni->fetch()) {
@@ -115,9 +116,11 @@ class Inbox extends Memcached_DataObject
 
         $result = $inbox->query(sprintf('UPDATE inbox '.
                                         'set notice_ids = concat(cast(0x%08x as binary(4)), '.
-                                        'substr(notice_ids, 1, 4092)) '.
+                                        'substr(notice_ids, 1, %d)) '.
                                         'WHERE user_id = %d',
-                                        $notice_id, $user_id));
+                                        $notice_id,
+                                        4 * (self::MAX_NOTICES - 1),
+                                        $user_id));
 
         if ($result) {
             self::blow('inbox:user_id:%d', $user_id);
@@ -173,4 +176,57 @@ class Inbox extends Memcached_DataObject
 
         return $ids;
     }
+
+    /**
+     * Wrapper for Inbox::stream() and Notice::getStreamByIds() returning
+     * additional items up to the limit if we were short due to deleted
+     * notices still being listed in the inbox.
+     *
+     * The fast path (when no items are deleted) should be just as fast; the
+     * offset parameter is applied *before* lookups for maximum efficiency.
+     *
+     * This means offset-based paging may show duplicates, but similar behavior
+     * already exists when new notices are posted between page views, so we
+     * think people will be ok with this until id-based paging is introduced
+     * to the user interface.
+     *
+     * @param int $user_id
+     * @param int $offset skip past the most recent N notices (after since_id checks)
+     * @param int $limit
+     * @param mixed $since_id return only notices after but not including this id
+     * @param mixed $max_id return only notices up to and including this id
+     * @param mixed $since obsolete/ignored
+     * @param mixed $own ignored?
+     * @return array of Notice objects
+     *
+     * @todo consider repacking the inbox when this happens?
+     */
+    function streamNotices($user_id, $offset, $limit, $since_id, $max_id, $since, $own=false)
+    {
+        $ids = self::stream($user_id, $offset, self::MAX_NOTICES, $since_id, $max_id, $since, $own);
+
+        // Do a bulk lookup for the first $limit items
+        // Fast path when nothing's deleted.
+        $firstChunk = array_slice($ids, 0, $limit);
+        $notices = Notice::getStreamByIds($firstChunk);
+
+        $wanted = count($firstChunk); // raw entry count in the inbox up to our $limit
+        if ($notices->N >= $wanted) {
+            return $notices;
+        }
+
+        // There were deleted notices, we'll need to look for more.
+        assert($notices instanceof ArrayWrapper);
+        $items = $notices->_items;
+        $remainder = array_slice($ids, $limit);
+
+        while (count($items) < $wanted && count($remainder) > 0) {
+            $notice = Notice::staticGet(array_shift($remainder));
+            if ($notice) {
+                $items[] = $notice;
+            } else {
+            }
+        }
+        return new ArrayWrapper($items);
+    }
 }
index ab65c30ce28579a8684b4e9fa8d9cc8124d2b833..dfd06b57e50366f4fb60b86578c2f3ddaecb510d 100644 (file)
@@ -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);
     }
 
index 486a65a3c7e2aa6d78bc8478f579b27e8d80ab93..2f8ab00b5dc097886687a8e2413bd59df689c59d 100644 (file)
@@ -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');
+    }
+
 }
index 42878d94f1aed2fc7da3c7355d41e9e64ac11268..73b22d58a030cea41a8afbd67121e755f26954ad 100644 (file)
@@ -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)) {
@@ -1468,4 +1508,25 @@ class Notice extends Memcached_DataObject
             $handler->handle($this);
         }
     }
+
+    function insert()
+    {
+        $result = parent::insert();
+
+        if ($result) {
+            // Profile::hasRepeated() abuses pkeyGet(), so we
+            // have to clear manually
+            if (!empty($this->repeat_of)) {
+                $c = self::memcache();
+                if (!empty($c)) {
+                    $ck = self::multicacheKey('Notice',
+                                              array('profile_id' => $this->profile_id,
+                                                    'repeat_of' => $this->repeat_of));
+                    $c->delete($ck);
+                }
+            }
+        }
+
+        return $result;
+    }
 }
index 1076fb2cb3e09f8b95b1915b36f1b6bb5ffbcef6..ab05bb8546bfe83d22ce66ce6164e509d32b6bc4 100644 (file)
@@ -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');
+    }
+
 }
index e7cecf9757dfc2c9da0175abac5289d7308b2e60..1c967b527b100b577d3cd6ea22e962a22295bc16 100644 (file)
@@ -497,28 +497,22 @@ class User extends Memcached_DataObject
 
     function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
     {
-        $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, false);
-        return Notice::getStreamByIds($ids);
+        return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, false);
     }
 
     function noticeInbox($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
     {
-        $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, true);
-        return Notice::getStreamByIds($ids);
+        return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, true);
     }
 
     function friendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
     {
-        $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, false);
-
-        return Notice::getStreamByIds($ids);
+        return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, false);
     }
 
     function ownFriendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
     {
-        $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, true);
-
-        return Notice::getStreamByIds($ids);
+        return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, true);
     }
 
     function blowFavesCache()
index c86eadf8fa7fff1e21ca9cb2f496d4aa4ce9acb4..379e6b7219fb6d84eed97b069d3e6c410c12ba36 100644 (file)
@@ -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
index 9916384fd95f1f0ba082902446f50e78f1df47b4..bcff744bdffd133f1439a7a69bc15d324a6b82d5 100644 (file)
@@ -353,7 +353,7 @@ notice_id = K
 id = 129
 owner = 129
 consumer_key = 130
-name = 2
+name = 130
 description = 2
 icon = 130
 source_url = 2
@@ -580,6 +580,7 @@ modified = 384
 
 [user_group__keys]
 id = N
+nickname = U
 
 [user_openid]
 canonical = 130
index 7f233e6760be02689ad98fc5dcf62905c32689a9..b9dd5af0c9b6ab284653422d3ef5c5d3c3f29cb3 100644 (file)
@@ -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
index 7cb6ad0644010664c3158a98c8a3e51cb6cbf63e..0cf0572565fb7318f427d299d25bafee479a6223 100644 (file)
@@ -209,7 +209,7 @@ create table oauth_application (
     id integer auto_increment primary key comment 'unique identifier',
     owner integer not null comment 'owner of the application' references profile (id),
     consumer_key varchar(255) not null comment 'application consumer key' references consumer (consumer_key),
-    name varchar(255) unique key comment 'name of the application',
+    name varchar(255) not null unique key comment 'name of the application',
     description varchar(255) comment 'description of the application',
     icon varchar(255) not null comment 'application icon',
     source_url varchar(255) comment 'application homepage - used for source link',
index c6a9682de23782427b46f45d3e604890aa405df6..639049668c29bf4b0ef6885dec09af30aa958741 100644 (file)
@@ -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;
             });
         },
 
index 7d94eaee4eda1de4a8e7750106afc19e3afe262e..7a99f48e8055cdbafcb1813f1afac1a293e027da 100644 (file)
@@ -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;
+    }
+
 }
index 262f4b966c6cb0d64dc5edf1046c1c17c63a445d..25e2196cf2c4bc0e004d5eb930146961c35112ab 100644 (file)
@@ -55,6 +55,7 @@ class ApiAuthAction extends ApiAction
 {
     var $auth_user_nickname = null;
     var $auth_user_password = null;
+    var $oauth_source       = null;
 
     /**
      * Take arguments for running, looks for an OAuth request,
@@ -73,28 +74,23 @@ class ApiAuthAction extends ApiAction
         // NOTE: $this->auth_user has to get set in prepare(), not handle(),
         // because subclasses do stuff with it in their prepares.
 
-        if ($this->requiresAuth()) {
+        $oauthReq = $this->getOAuthRequest();
 
-            $oauthReq = $this->getOAuthRequest();
-
-            if (!$oauthReq) {
+        if (!$oauthReq) {
+            if ($this->requiresAuth()) {
                 $this->checkBasicAuthUser(true);
             } else {
-                $this->checkOAuthRequest($oauthReq);
+                // Check to see if a basic auth user is there even
+                // if one's not required
+                $this->checkBasicAuthUser(false);
             }
         } else {
-
-            // Check to see if a basic auth user is there even
-            // if one's not required
-            $this->checkBasicAuthUser(false);
+            $this->checkOAuthRequest($oauthReq);
         }
 
         // Reject API calls with the wrong access level
 
         if ($this->isReadOnly($args) == false) {
-
-            common_debug(get_class($this) . ' is not read-only!');
-
             if ($this->access != self::READ_WRITE) {
                 $msg = _('API resource requires read-write access, ' .
                          'but you only have read access.');
@@ -111,7 +107,6 @@ class ApiAuthAction extends ApiAction
      * This is to avoid doign any unnecessary DB lookups.
      *
      * @return mixed the OAuthRequest or false
-     *
      */
 
     function getOAuthRequest()
@@ -140,7 +135,6 @@ class ApiAuthAction extends ApiAction
      * @param OAuthRequest $request the OAuth Request
      *
      * @return nothing
-     *
      */
 
     function checkOAuthRequest($request)
diff --git a/lib/atom10entry.php b/lib/atom10entry.php
new file mode 100644 (file)
index 0000000..5710c80
--- /dev/null
@@ -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 (file)
index 0000000..806a968
--- /dev/null
@@ -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 (file)
index 0000000..34ed44b
--- /dev/null
@@ -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());
+    }
+
+}
index 635c96ad4c7899640ac0f8c3ed7e149daad9ce5a..df6fc364931fb2f7b0734523e76724b8c8b675d5 100644 (file)
@@ -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
index 437f350ddae38a179dfc8f0bfb6dcc3de0dc6c1b..cc6863488feb3454a2a35ba21e8e8e3a451b7a46 100644 (file)
@@ -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
               ),
@@ -144,9 +145,11 @@ $default =
         'invite' =>
         array('enabled' => true),
         'tag' =>
-        array('dropoff' => 864000.0),
+        array('dropoff' => 864000.0,   # controls weighting based on age
+              'cutoff' => 86400 * 90), # only look at notices posted in last 90 days
         'popular' =>
-        array('dropoff' => 864000.0),
+        array('dropoff' => 864000.0,   # controls weighting based on age
+              'cutoff' => 86400 * 90), # only look at notices favorited in last 90 days
         'daemon' =>
         array('piddir' => '/var/run',
               'user' => false,
index 87a4d913b41b1287f7af821926c5a8dea82a8439..a6a29119f7f612046f2f2c0075167c5d03acef84 100644 (file)
@@ -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();
index 14ceda0850b09b6918c4da00517370f6b31bad42..f1106cc7bf9caeb3151595e5e2d5b022ea8427c5 100644 (file)
@@ -59,6 +59,7 @@ class GroupTagCloudSection extends TagCloudSection
     function getTags()
     {
         $weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
+        // @fixme should we use the cutoff too? Doesn't help with indexing per-group.
 
         $names = $this->group->getAliases();
 
index 3f82620761c6eef8d953cc11fa9611addad5ba96..4c3af8d7dd950fd1b23a4988e3710f8148f93ef8 100644 (file)
@@ -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);
     }
 }
 
index 1f7c3d09269f40d5d1d33547216cd80d9d669fda..485096ac425d4dea1dc48f7ab3d5cfb3040d1a83 100644 (file)
@@ -213,6 +213,7 @@ class MysqlSchema extends Schema
 
         $sql .= "); ";
 
+        common_log(LOG_INFO, $sql);
         $res = $this->conn->query($sql);
 
         if (PEAR::isError($res)) {
index b22fd789740c95b93fc0c5623202ceb920447b3e..bc7587183b2c4ca8dde3878f4ccd9d5507beeded 100644 (file)
@@ -90,20 +90,47 @@ class OAuthClient
     /**
      * Gets a request token from the given url
      *
-     * @param string $url OAuth endpoint for grabbing request tokens
+     * @param string $url      OAuth endpoint for grabbing request tokens
+     * @param string $callback authorized request token callback
      *
      * @return OAuthToken $token the request token
      */
-    function getRequestToken($url)
+    function getRequestToken($url, $callback = null)
     {
-        $response = $this->oAuthGet($url);
+        $params = null;
+
+        if (!is_null($callback)) {
+            $params['oauth_callback'] = $callback;
+        }
+
+        $response = $this->oAuthGet($url, $params);
+
         $arr = array();
         parse_str($response, $arr);
-        if (isset($arr['oauth_token']) && isset($arr['oauth_token_secret'])) {
-            $token = new OAuthToken($arr['oauth_token'], @$arr['oauth_token_secret']);
+
+        $token   = $arr['oauth_token'];
+        $secret  = $arr['oauth_token_secret'];
+        $confirm = $arr['oauth_callback_confirmed'];
+
+        if (isset($token) && isset($secret)) {
+
+            $token = new OAuthToken($token, $secret);
+
+            if (isset($confirm)) {
+                if ($confirm == 'true') {
+                    common_debug('Twitter bridge - callback confirmed.');
+                    return $token;
+                } else {
+                    throw new OAuthClientException(
+                        'Callback was not confirmed by Twitter.'
+                    );
+                }
+            }
             return $token;
         } else {
-            throw new OAuthClientException();
+            throw new OAuthClientException(
+                'Could not get a request token from Twitter.'
+            );
         }
     }
 
@@ -113,49 +140,64 @@ class OAuthClient
      *
      * @param string     $url            endpoint for authorizing request tokens
      * @param OAuthToken $request_token  the request token to be authorized
-     * @param string     $oauth_callback optional callback url
      *
      * @return string $authorize_url the url to redirect to
      */
-    function getAuthorizeLink($url, $request_token, $oauth_callback = null)
+    function getAuthorizeLink($url, $request_token)
     {
         $authorize_url = $url . '?oauth_token=' .
             $request_token->key;
 
-        if (isset($oauth_callback)) {
-            $authorize_url .= '&oauth_callback=' . urlencode($oauth_callback);
-        }
-
         return $authorize_url;
     }
 
     /**
      * Fetches an access token
      *
-     * @param string $url OAuth endpoint for exchanging authorized request tokens
-     *                     for access tokens
+     * @param string $url      OAuth endpoint for exchanging authorized request tokens
+     *                         for access tokens
+     * @param string $verifier 1.0a verifier
      *
      * @return OAuthToken $token the access token
      */
-    function getAccessToken($url)
+    function getAccessToken($url, $verifier = null)
     {
-        $response = $this->oAuthPost($url);
-        parse_str($response);
-        $token = new OAuthToken($oauth_token, $oauth_token_secret);
-        return $token;
+        $params = array();
+
+        if (!is_null($verifier)) {
+            $params['oauth_verifier'] = $verifier;
+        }
+
+        $response = $this->oAuthPost($url, $params);
+
+        $arr = array();
+        parse_str($response, $arr);
+
+        $token  = $arr['oauth_token'];
+        $secret = $arr['oauth_token_secret'];
+
+        if (isset($token) && isset($secret)) {
+            $token = new OAuthToken($token, $secret);
+            return $token;
+        } else {
+            throw new OAuthClientException(
+                'Could not get a access token from Twitter.'
+            );
+        }
     }
 
     /**
-     * Use HTTP GET to make a signed OAuth request
+     * Use HTTP GET to make a signed OAuth requesta
      *
-     * @param string $url OAuth endpoint
+     * @param string $url    OAuth request token endpoint
+     * @param array  $params additional parameters
      *
      * @return mixed the request
      */
-    function oAuthGet($url)
+    function oAuthGet($url, $params = null)
     {
         $request = OAuthRequest::from_consumer_and_token($this->consumer,
-            $this->token, 'GET', $url, null);
+            $this->token, 'GET', $url, $params);
         $request->sign_request($this->sha1_method,
             $this->consumer, $this->token);
 
index b30fb49d57e2f16b0c737df00d0354492dbd4aa9..eabe37f9fa4a944d76f99c91c9a57de69c6c0f23 100644 (file)
@@ -65,7 +65,7 @@ class StatusNetOAuthDataStore extends OAuthDataStore
     {
         $n = new Nonce();
         $n->consumer_key = $consumer->key;
-        $n->ts = $timestamp;
+        $n->ts = common_sql_date($timestamp);
         $n->nonce = $nonce;
         if ($n->find(true)) {
             return true;
@@ -362,7 +362,6 @@ class StatusNetOAuthDataStore extends OAuthDataStore
                                   array('is_local' => Notice::REMOTE_OMB,
                                         'uri' => $omb_notice->getIdentifierURI()));
 
-
     }
 
     /**
index 091425f926d296f8959322e63c2a3ac770bae41d..5ea3f188dbf61b2385ad85fde65d15831a381154 100644 (file)
@@ -59,6 +59,7 @@ class PersonalTagCloudSection extends TagCloudSection
     function getTags()
     {
         $weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
+        // @fixme should we use the cutoff too? Doesn't help with indexing per-user.
 
         $qry = 'SELECT notice_tag.tag, '.
           $weightexpr . ' as weight ' .
index fbf9a60ab8112395156ffa26b9a5021293f816b6..296ddbbb5034b273e5486d25484cdd191142f0d4 100644 (file)
@@ -59,12 +59,15 @@ class PopularNoticeSection extends NoticeSection
             }
         }
         $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
+        $cutoff = sprintf("fave.modified > '%s'",
+                          common_sql_date(time() - common_config('popular', 'cutoff')));
         $qry = "SELECT notice.*, $weightexpr as weight ";
         if(isset($tag)) {
             $qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' .
-                    "WHERE notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag";
+                    "WHERE $cutoff and notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag";
         } else {
-            $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id';
+            $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
+                    "WHERE $cutoff";
         }
         $qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' .
                 'notice.rendered,notice.url,notice.created,notice.modified,' .
index a0b13fe556f6a93596c91580084ab9352080d1dc..162c9f3757d422aa95e07c37c32688fe5edc1386 100644 (file)
@@ -157,17 +157,17 @@ abstract class QueueManager extends IoManager
     /**
      * Encode an object for queued storage.
      *
-     * @param mixed $object
+     * @param mixed $item
      * @return string
      */
-    protected function encode($object)
+    protected function encode($item)
     {
         return serialize($object);
     }
 
     /**
      * 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
index 5e66eae0ed3da13e43d638eb6e33f9534ebb9043..4e9c5a918dbe02b2e2795c63167dd9a99d7db8e7 100644 (file)
@@ -57,5 +57,6 @@ class Right
     const EMAILONREPLY       = 'emailonreply';
     const EMAILONSUBSCRIBE   = 'emailonsubscribe';
     const EMAILONFAVE        = 'emailonfave';
+    const MAKEGROUPADMIN     = 'makegroupadmin';
 }
 
index b1961d68801c308fc25429a4cee80b028439f72d..862cbb4fa342b88b735a68c60481cfff26a620f5 100644 (file)
@@ -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.");
                 }
index 2654ba5736ade358644a368534f48878f8eaf1bb..3951d9251b89ad0014860f0dbd263f24552b6d3c 100644 (file)
@@ -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
index 6730cd213d789dcd1e4de8ed273a27f8653a4ebf..cd62c25bd828c9a6bc37b158e2b9dc3ae5bb5180 100644 (file)
@@ -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) {
index 9a24d268db7caccad26f1b7979f57a2f5511e006..3f20e2ec75382a2b7e0b8a8936a2f8fc67b738dd 100644 (file)
@@ -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)) {
index 7e61e492d0e8c47ea763ae492e487764687d290b..c7276b56f7a39b0ff001b232821c8734e2b51282 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:02+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 (r61864); 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 "اذÙ\81 Ø¥Ø¹Ø¯Ø§Ø¯Øª الموقع"
+msgstr "إعدادات Ø§Ù\84Ù\88صÙ\88Ù\84 Ø¥Ù\84Ù\89 الموقع"
 
 #: actions/accessadminpanel.php:158
-#, fuzzy
 msgid "Registration"
-msgstr "سجÙ\91ل"
+msgstr "تسجÙ\8aل"
 
 #: actions/accessadminpanel.php:161
 msgid "Private"
@@ -72,9 +70,8 @@ msgid "Save"
 msgstr "أرسل"
 
 #: actions/accessadminpanel.php:189
-#, fuzzy
 msgid "Save access settings"
-msgstr "اذÙ\81 Ø¥Ø¹Ø¯Ø§Ø¯Øª Ø§Ù\84Ù\85Ù\88Ù\82ع"
+msgstr "Ø­Ù\81ظ Ø¥Ø¹Ø¯Ø§Ø¯Øª Ø§Ù\84Ù\88صÙ\88Ù\84"
 
 #: 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 ""
@@ -176,22 +173,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: 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:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
 msgid "API method not found."
 msgstr "لم يتم العثور على وسيلة API."
 
@@ -279,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
@@ -352,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."
@@ -368,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
@@ -405,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
@@ -445,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
@@ -551,7 +549,8 @@ msgstr "الحساب"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "الاسم المستعار"
@@ -626,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 ""
@@ -637,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!"
@@ -653,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 ""
@@ -668,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"
@@ -678,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 ""
@@ -738,7 +737,7 @@ msgstr "الأصلي"
 msgid "Preview"
 msgstr "عاين"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "احذف"
@@ -802,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 "امنع هذا المستخدم"
 
@@ -1215,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 "تعذّر إنشاء الكنى."
 
@@ -1406,7 +1405,7 @@ msgstr "هذا الإشعار مفضلة مسبقًا!"
 msgid "Disfavor favorite"
 msgstr "ألغِ تفضيل المفضلة"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "إشعارات مشهورة"
@@ -1548,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 "امنع المستخدم من المجموعة"
 
@@ -1643,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 "اجعل هذا المستخدم إداريًا"
 
@@ -2003,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."
@@ -2212,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 "ليس نسق بيانات مدعوم."
 
@@ -2542,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"
@@ -2565,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"
@@ -2582,14 +2581,14 @@ msgstr "السيرة"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 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"
@@ -2605,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"
@@ -2625,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
@@ -2760,7 +2760,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "سحابة الوسوم"
 
@@ -3163,76 +3163,81 @@ msgstr "اذف إعدادت الموقع"
 msgid "You must be logged in to view an application."
 msgstr "يجب أن تكون مسجل الدخول لرؤية تطبيق."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr ""
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "أيقونة"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "الاسم"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "المنظمة"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "الوصف"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "إحصاءات"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "اسمح بالمسار"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "أمتأكد من أنك تريد حذف هذا الإشعار؟"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3301,12 +3306,12 @@ msgid "Group profile"
 msgstr "ملف المجموعة الشخصي"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "مسار"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "ملاحظة"
 
@@ -3845,7 +3850,8 @@ msgstr ""
 msgid "User profile"
 msgstr "ملف المستخدم الشخصي"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "صورة"
 
@@ -3900,7 +3906,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr ""
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -3984,84 +3990,84 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "الرخصة"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "اقبل"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "اشترك بهذا المستخدم"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "ارفض"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "ارفض هذا الاشتراك"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "لا طلب استيثاق!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "رُفض الاشتراك"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr ""
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4238,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"
@@ -4248,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 "تعذّر ضبط عضوية المجموعة."
 
@@ -4520,11 +4526,11 @@ msgstr "ضبط المسارات"
 msgid "Sessions configuration"
 msgstr "ضبط التصميم"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5516,11 +5522,11 @@ msgstr "خطأ أثناء إدراج الملف الشخصي البعيد"
 msgid "Duplicate notice"
 msgstr "ضاعف الإشعار"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "تعذّر إدراج اشتراك جديد."
 
@@ -5794,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 "قبل سنة تقريبًا"
 
index 27755a0ceec80d412045744983f3ce2ed6f26fed..2940486d81b301f7efde98de5e18675a7637210d 100644 (file)
@@ -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-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:06+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 (r61864); 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 ""
@@ -176,22 +177,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: 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:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
 msgid "API method not found."
 msgstr "لم يتم العثور على وسيله API."
 
@@ -315,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."
@@ -323,7 +325,7 @@ msgstr "تعذّر إنشاء مفضله."
 
 #: actions/apifavoritedestroy.php:122
 msgid "That status is not a favorite."
-msgstr "تÙ\84Ù\83 Ø§Ù\84حاÙ\84Ù\87 Ù\84Ù\8aست Ù\85Ù\81ضÙ\84Ù\87."
+msgstr "اÙ\84حاÙ\84Ù\87 Ø¯Ù\89 Ù\85Ø´ Ù\85حطÙ\88Ø·Ù\87 Ù\81Ù\89 Ø§Ù\84تÙ\81ضÙ\8aÙ\84ات."
 
 #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
 msgid "Could not delete favorite."
@@ -344,7 +346,7 @@ msgstr ""
 
 #: actions/apifriendshipsdestroy.php:120
 msgid "You cannot unfollow yourself."
-msgstr "Ù\84ا Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø¹Ø¯Ù\85 Ù\85تابعÙ\87 نفسك."
+msgstr "Ù\85ا Ù\8aÙ\86Ù\81عش Ø¹Ø¯Ù\85 Ù\85تابعة نفسك."
 
 #: actions/apifriendshipsexists.php:94
 msgid "Two user ids or screen_names must be supplied."
@@ -441,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 "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 Ø¶Ù\85 Ø§Ù\84Ù\85ستخدÙ\85 %1$s Ø¥Ù\84Ù\89 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 %2$s."
+msgstr "Ù\85ا Ù\86Ù\81عش Ù\8aضÙ\85 %1$s Ù\84Ù\84جرÙ\88Ù¾ %2$s."
 
 #: actions/apigroupleave.php:114
 msgid "You are not a member of this group."
@@ -450,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 "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 Ø¥Ø²Ø§Ù\84Ù\87 Ø§Ù\84Ù\85ستخدÙ\85 %1$s Ù\85Ù\86 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 %2$s."
+msgstr "Ù\85ا Ù\86Ù\81عش Ù\8aتشاÙ\84 Ø§Ù\84Ù\8aÙ\88زر %1$s Ù\85Ù\86 Ø§Ù\84جرÙ\88Ù¾ %2$s."
 
 #: actions/apigrouplist.php:95
 #, php-format
@@ -496,7 +498,7 @@ msgstr ""
 
 #: actions/apioauthauthorize.php:135
 msgid "Invalid nickname / password!"
-msgstr "اسم/كلمه سر غير صحيحة!"
+msgstr "نيكنيم / پاسوورد مش مظبوطه!"
 
 #: actions/apioauthauthorize.php:159
 #, fuzzy
@@ -551,7 +553,8 @@ msgstr "الحساب"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "الاسم المستعار"
@@ -626,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 ""
@@ -637,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!"
@@ -653,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 ""
@@ -668,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"
@@ -678,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 ""
@@ -738,7 +741,7 @@ msgstr "الأصلي"
 msgid "Preview"
 msgstr "عاين"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "احذف"
@@ -802,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 "امنع هذا المستخدم"
 
@@ -828,7 +831,7 @@ msgstr ""
 #: actions/blockedfromgroup.php:93
 #, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%1$s Ù\85Ù\84Ù\81ات Ù\85Ù\85Ù\86Ù\88عة, الصفحه %2$d"
+msgstr "%1$s Ù\81اÙ\8aÙ\84ات Ù\85عÙ\85Ù\88Ù\84 Ù\84Ù\8aÙ\87ا Ø¨Ù\84Ù\88Ù\83, الصفحه %2$d"
 
 #: actions/blockedfromgroup.php:108
 msgid "A list of the users blocked from joining this group."
@@ -886,7 +889,7 @@ msgstr "تعذّر حذف تأكيد البريد الإلكترونى."
 
 #: actions/confirmaddress.php:144
 msgid "Confirm address"
-msgstr "Ø£كد العنوان"
+msgstr "اكد العنوان"
 
 #: actions/confirmaddress.php:159
 #, php-format
@@ -915,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 "Ø£Ù\86ت Ù\84ست Ù\85اÙ\84Ù\83 Ù\87ذا Ø§Ù\84تطبÙ\8aÙ\82."
+msgstr "اÙ\86ت Ù\85Ø´ Ø¨ØªÙ\85Ù\84Ù\83 Ø§Ù\84application Ø¯Ù\89."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1129,16 +1132,16 @@ msgstr "تطبيقات OAuth"
 
 #: actions/editapplication.php:66
 msgid "You must be logged in to edit an application."
-msgstr "Ù\8aجب Ø£Ù\86 ØªÙ\83Ù\88Ù\86 Ù\85سجÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ù\84تعدÙ\84 ØªØ·Ø¨Ù\8aÙ\82ا."
+msgstr "Ù\84ازÙ\85 Ù\8aÙ\83Ù\88Ù\86 Ù\85تسجÙ\84 Ø¯Ø®Ù\88Ù\84Ù\83 Ø¹Ù\84شاÙ\86 ØªØ¹Ø¯Ù\91Ù\84 application."
 
 #: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
 #: actions/showapplication.php:87
 msgid "No such application."
-msgstr "Ù\84ا ØªØ·Ø¨Ù\8aÙ\82 Ù\83Ù\87ذا."
+msgstr "Ù\85ا Ù\81Ù\8aØ´ application Ø²Ù\89 Ù\83دÙ\87."
 
 #: actions/editapplication.php:161
 msgid "Use this form to edit your application."
-msgstr "استخدÙ\85 Ø§Ù\84Ù\86Ù\85Ù\88ذج Ø¯Ù\87 Ø¹Ù\84شاÙ\86 ØªØ¹Ø¯Ù\84 ØªØ·Ø¨Ù\8aÙ\82ك."
+msgstr "استعÙ\85Ù\84 Ø§Ù\84Ù\81Ù\88رÙ\85Ù\87 Ø¯Ù\89 Ø¹Ù\84شاÙ\86 ØªØ¹Ø¯Ù\91Ù\84 Ø§Ù\84application Ø¨ØªØ§Ø¹Øªك."
 
 #: actions/editapplication.php:177 actions/newapplication.php:159
 msgid "Name is required."
@@ -1146,7 +1149,7 @@ msgstr "الاسم مطلوب."
 
 #: actions/editapplication.php:180 actions/newapplication.php:165
 msgid "Name is too long (max 255 chars)."
-msgstr "اÙ\84اسÙ\85 Ø·Ù\88Ù\8aÙ\84 Ø¬Ø¯Ø§ (اÙ\84Ø£Ù\82صÙ\89 255 Ø­Ø±Ù\81ا)."
+msgstr "اÙ\84اسÙ\85 Ø·Ù\88Ù\8aÙ\84 Ø¬Ø¯Ø§ (اÙ\83تر Ø­Ø§Ø¬Ù\87 255 Ø±Ù\85ز)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
 msgid "Name already in use. Try another one."
@@ -1162,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."
@@ -1170,7 +1173,7 @@ msgstr ""
 
 #: actions/editapplication.php:206 actions/newapplication.php:191
 msgid "Organization is too long (max 255 chars)."
-msgstr "اÙ\84Ù\85Ù\86ظÙ\85Ù\87 Ø·Ù\88Ù\8aÙ\84Ù\87 Ø¬Ø¯Ø§ (اÙ\84Ø£Ù\82صÙ\89 255 Ø­Ø±Ù\81ا)."
+msgstr "اÙ\84Ù\85Ù\86ظÙ\85Ù\87 Ø·Ù\88Ù\8aÙ\84Ù\87 Ø¬Ø¯Ø§ (اÙ\83تر Ø­Ø§Ø¬Ù\87 255 Ø±Ù\85ز)."
 
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
@@ -1186,7 +1189,7 @@ msgstr ""
 
 #: actions/editapplication.php:258
 msgid "Could not update application."
-msgstr "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 ØªØ­Ø¯Ù\8aØ« Ø§Ù\84تطبÙ\8aÙ\82."
+msgstr "Ù\85ا Ù\86Ù\81عش ØªØ­Ø¯Ù\8aØ« Ø§Ù\84application."
 
 #: actions/editgroup.php:56
 #, php-format
@@ -1200,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 "Ù\8aجب Ø£Ù\86 ØªÙ\83Ù\88Ù\86 Ø¥Ø¯Ø§Ø±Ù\8aا Ù\84تعدÙ\84 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87."
+msgstr "Ù\84ازÙ\85 ØªÙ\83Ù\88Ù\86 Ø§Ø¯Ø§Ø±Ù\89 Ø¹Ù\84شاÙ\86 ØªØ¹Ø¯Ù\91Ù\84 Ø§Ù\84جرÙ\88Ù¾."
 
 #: actions/editgroup.php:154
 msgid "Use this form to edit the group."
@@ -1215,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 "تعذّر إنشاء الكنى."
 
@@ -1225,7 +1228,7 @@ msgstr "حُفظت الخيارات."
 
 #: actions/emailsettings.php:60
 msgid "Email settings"
-msgstr "إعدادات Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a"
+msgstr "تظبÙ\8aطات Ø§Ù\84اÙ\8aÙ\85Ù\8aÙ\84"
 
 #: actions/emailsettings.php:71
 #, php-format
@@ -1261,7 +1264,7 @@ msgstr "ألغِ"
 
 #: actions/emailsettings.php:121
 msgid "Email address"
-msgstr "عÙ\86Ù\88اÙ\86 Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a"
+msgstr "عÙ\86Ù\88اÙ\86 Ø§Ù\84اÙ\8aÙ\85Ù\8aÙ\84"
 
 #: actions/emailsettings.php:123
 msgid "Email address, like \"UserName@example.org\""
@@ -1406,7 +1409,7 @@ msgstr "هذا الإشعار مفضله مسبقًا!"
 msgid "Disfavor favorite"
 msgstr "ألغِ تفضيل المفضلة"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "إشعارات مشهورة"
@@ -1548,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 "امنع المستخدم من المجموعة"
 
@@ -1611,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."
@@ -1633,7 +1636,7 @@ msgstr "أعضاء مجموعه %s"
 #: actions/groupmembers.php:96
 #, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "%1$s Ø£Ø¹Ø¶Ø§Ø¡ Ø§Ù\84Ù\85جÙ\85Ù\88عة, Ø§Ù\84صفحه %2$d"
+msgstr "%1$s Ø§Ø¹Ø¶Ø§Ø¡ Ø§Ù\84جرÙ\88Ù¾, صفحه %2$d"
 
 #: actions/groupmembers.php:111
 msgid "A list of the users in this group."
@@ -1643,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 "اجعل هذا المستخدم إداريًا"
 
@@ -1732,7 +1735,7 @@ msgstr "خطأ أثناء منع الحجب."
 
 #: actions/imsettings.php:59
 msgid "IM settings"
-msgstr "إعدادات Ø§Ù\84Ù\85راسÙ\84Ù\87 Ø§Ù\84Ù\81Ù\88رÙ\8aØ©"
+msgstr "تظبÙ\8aطات Ø¨Ø¹Øª Ø§Ù\84رساÙ\8aÙ\84 Ø§Ù\84Ù\81Ù\88رÙ\8aÙ\87"
 
 #: actions/imsettings.php:70
 #, php-format
@@ -1758,7 +1761,7 @@ msgstr ""
 
 #: actions/imsettings.php:124
 msgid "IM address"
-msgstr "عنوان المراسله الفورية"
+msgstr "عنوان الرساله الفوريه"
 
 #: actions/imsettings.php:126
 #, php-format
@@ -1942,7 +1945,7 @@ msgstr ""
 #: actions/joingroup.php:131
 #, php-format
 msgid "%1$s joined group %2$s"
-msgstr "%1$s Ø§Ù\86ضÙ\85 Ù\84Ù\84Ù\85جÙ\85Ù\88عÙ\87 %2$s"
+msgstr "%1$s Ø¯Ø®Ù\84 Ø¬Ø±Ù\88Ù¾ %2$s"
 
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
@@ -1955,7 +1958,7 @@ msgstr "لست عضوا فى تلك المجموعه."
 #: actions/leavegroup.php:127
 #, php-format
 msgid "%1$s left group %2$s"
-msgstr "%1$s ØªØ±Ù\83 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 %2$s"
+msgstr "%1$s Ø³Ø§Ø¨ Ø¬Ø±Ù\88Ù¾ %2$s"
 
 #: actions/login.php:80 actions/otp.php:62 actions/register.php:137
 msgid "Already logged in."
@@ -2003,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 "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 Ø§Ù\84حصÙ\88Ù\84 Ø¹Ù\84Ù\89 ØªØ³Ø¬Ù\8aÙ\84 Ø§Ù\84عضÙ\88Ù\8aÙ\87 Ù\84%1$s Ù\81Ù\89 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 %2$s."
+msgstr "Ù\85Ø´ Ù\86اÙ\81ع Ù\8aتجاب Ø³Ø¬Ù\84 Ø§Ù\84عضÙ\88Ù\8aÙ\87 Ù\84Ù\80%1$s Ù\81Ù\89 Ø¬Ø±Ù\88Ù¾ %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"
@@ -2033,11 +2036,11 @@ msgstr "لا تطبيق كهذا."
 
 #: actions/newapplication.php:64
 msgid "You must be logged in to register an application."
-msgstr "Ù\8aجب Ø£Ù\86 ØªÙ\83Ù\88Ù\86 Ù\85سجÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ù\84تسجÙ\84 ØªØ·Ø¨Ù\8aÙ\82ا."
+msgstr "Ù\84ازÙ\85 ØªÙ\83Ù\88Ù\86 Ù\85سجÙ\84 Ø¯Ø®Ù\88Ù\84Ù\84Ù\83 Ø¹Ù\84شاÙ\86 ØªØ³Ø¬Ù\84 application."
 
 #: actions/newapplication.php:143
 msgid "Use this form to register a new application."
-msgstr "استخدÙ\85 Ù\87ذا Ø§Ù\84Ù\86Ù\85Ù\88ذج Ù\84تسجÙ\84 ØªØ·Ø¨Ù\8aÙ\82ا Ø¬Ø¯Ù\8aدا."
+msgstr "استعÙ\85Ù\84 Ø§Ù\84Ù\81Ù\88رÙ\85Ù\87 Ø¯Ù\89 Ø¹Ù\84شاÙ\86 ØªØ³Ø¬Ù\84 application Ø¬Ø¯Ù\8aد."
 
 #: actions/newapplication.php:176
 msgid "Source URL is required."
@@ -2045,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"
@@ -2084,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"
@@ -2112,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
@@ -2153,11 +2156,11 @@ msgstr "أُرسل التنبيه!"
 
 #: actions/oauthappssettings.php:59
 msgid "You must be logged in to list your applications."
-msgstr "Ù\8aجب Ø£Ù\86 ØªÙ\83Ù\88Ù\86 Ù\85سجÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ù\84عرض ØªØ·Ø¨Ù\8aÙ\82اتك."
+msgstr "Ù\84ازÙ\85 ØªÙ\83Ù\88Ù\86 Ù\85سجÙ\84 Ø¯Ø®Ù\88Ù\84Ù\83 Ø¹Ù\84شاÙ\86 ØªØ´Ù\88Ù\81 Ù\84Ù\8aستة Ø§Ù\84applications Ø¨ØªØ§Ø¹تك."
 
 #: actions/oauthappssettings.php:74
 msgid "OAuth applications"
-msgstr "تطبيقات OAuth"
+msgstr "OAuth applications"
 
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
@@ -2178,7 +2181,7 @@ msgstr ""
 
 #: actions/oauthconnectionssettings.php:175
 msgid "You are not a user of that application."
-msgstr "Ø£Ù\86ت Ù\84ست Ù\85ستخدÙ\85ا Ù\84Ù\87ذا Ø§Ù\84تطبÙ\8aÙ\82."
+msgstr "اÙ\86ت Ù\85Ø´ Ù\8aÙ\88زر Ù\84Ù\84application Ø¯Ù\89."
 
 #: actions/oauthconnectionssettings.php:186
 msgid "Unable to revoke access for app: "
@@ -2210,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 " مش نظام بيانات مدعوم."
 
@@ -2225,7 +2228,7 @@ msgstr "بحث الإشعارات"
 
 #: actions/othersettings.php:60
 msgid "Other settings"
-msgstr "إعدادات تانيه"
+msgstr "تظبÙ\8aØ·ات تانيه"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2257,23 +2260,23 @@ msgstr ""
 
 #: actions/otp.php:69
 msgid "No user ID specified."
-msgstr "Ù\84ا Ù\87Ù\88Ù\8aÙ\87 Ù\85ستخدÙ\85 Ù\85حددÙ\87."
+msgstr "Ù\85ا Ù\81Ù\8aØ´ ID Ù\85تحدد Ù\84Ù\84Ù\8aÙ\88زر."
 
 #: actions/otp.php:83
 msgid "No login token specified."
-msgstr "Ù\84ا Ù\85حتÙ\88Ù\89 Ø¯Ø®Ù\88Ù\84 Ù\85حدد."
+msgstr "Ù\85ا Ù\81Ù\8aØ´ Ø§Ù\85ارة Ø¯Ø®Ù\88Ù\84 Ù\85تحددÙ\87."
 
 #: actions/otp.php:90
 msgid "No login token requested."
-msgstr "Ù\84ا Ø·Ù\84ب Ø§Ø³ØªÙ\8aثاÙ\82."
+msgstr "Ù\85ا Ù\81Ù\8aØ´ Ø·Ù\84ب ØªØ³Ø¬Ù\8aÙ\84 Ø¯Ø®Ù\88Ù\84 Ù\85Ø·Ù\84Ù\88ب."
 
 #: actions/otp.php:95
 msgid "Invalid login token specified."
-msgstr "تÙ\88Ù\83Ù\86 Ø¯Ø®Ù\88Ù\84 ØºÙ\8aر ØµØ­Ù\8aØ­ Ù\85حدد."
+msgstr "اÙ\85ارة ØªØ³Ø¬Ù\8aÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ø§Ù\84Ù\84Ù\89 Ø§ØªØ­Ø·Øª Ù\85Ø´ Ù\85Ù\88جÙ\88دÙ\87."
 
 #: actions/otp.php:104
 msgid "Login token expired."
-msgstr "توكن الدخول انتهى."
+msgstr "تاريخ صلاحية الاماره خلص."
 
 #: actions/outbox.php:58
 #, php-format
@@ -2493,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"
@@ -2580,7 +2583,7 @@ msgstr "السيرة"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "الموقع"
@@ -2758,7 +2761,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "سحابه الوسوم"
 
@@ -3116,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."
@@ -3159,78 +3162,83 @@ msgstr "اذف إعدادت الموقع"
 
 #: actions/showapplication.php:82
 msgid "You must be logged in to view an application."
-msgstr "Ù\8aجب Ø£Ù\86 ØªÙ\83Ù\88Ù\86 Ù\85سجÙ\84 Ø§Ù\84دخÙ\88Ù\84 Ù\84رؤÙ\8aÙ\87 ØªØ·Ø¨Ù\8aÙ\82."
+msgstr "Ù\84ازÙ\85 ØªÙ\83Ù\88Ù\86 Ù\85سجÙ\84 Ø¯Ø®Ù\88Ù\84Ù\83 Ø¹Ù\84شاÙ\86 ØªØ´Ù\88Ù\81 Ø§Ù\89 application."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr ""
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "الاسم"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
-msgstr "المنظمة"
+msgstr "المنظمه"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "الوصف"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "إحصاءات"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr "اسمح بالمسار"
+msgstr "اسمح للURL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "أمتأكد من أنك تريد حذف هذا الإشعار؟"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3299,12 +3307,12 @@ msgid "Group profile"
 msgstr "ملف المجموعه الشخصي"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "مسار"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "ملاحظة"
 
@@ -3492,12 +3500,12 @@ msgstr "يجب ألا يكون طول اسم الموقع صفرًا."
 
 #: actions/siteadminpanel.php:140
 msgid "You must have a valid contact email address."
-msgstr "Ù\8aجب Ø£Ù\86 ØªÙ\85Ù\84Ù\83 Ø¹Ù\86Ù\88اÙ\86 Ø¨Ø±Ù\8aد Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\89 ØµØ­Ù\8aح."
+msgstr "Ù\84ازÙ\85 Ù\8aÙ\83Ù\88Ù\86 Ø¹Ù\86دÙ\83 Ø¹Ù\86Ù\88اÙ\86 Ø§Ù\8aÙ\85Ù\8aÙ\84 ØµØ§Ù\84ح."
 
 #: actions/siteadminpanel.php:158
 #, php-format
 msgid "Unknown language \"%s\"."
-msgstr "لغه غير معروفه \"%s\"."
+msgstr "لغه مش معروفه \"%s\"."
 
 #: actions/siteadminpanel.php:165
 msgid "Invalid snapshot report URL."
@@ -3625,7 +3633,7 @@ msgstr ""
 
 #: actions/smssettings.php:58
 msgid "SMS settings"
-msgstr "إعدادات Ø§Ù\84رسائÙ\84 Ø§Ù\84Ù\82صÙ\8aرة"
+msgstr "تظبÙ\8aطات Ø§Ù\84Ù\80SMS"
 
 #: actions/smssettings.php:69
 #, php-format
@@ -3654,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"
@@ -3739,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."
@@ -3776,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."
@@ -3843,7 +3851,8 @@ msgstr ""
 msgid "User profile"
 msgstr "ملف المستخدم الشخصي"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "صورة"
 
@@ -3898,7 +3907,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr ""
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -3982,84 +3991,84 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "الرخصة"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "اقبل"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "اشترك بهذا المستخدم"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "ارفض"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "ارفض هذا الاشتراك"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "لا طلب استيثاق!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "رُفض الاشتراك"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr ""
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4100,7 +4109,7 @@ msgstr ""
 #: actions/version.php:73
 #, php-format
 msgid "StatusNet %s"
-msgstr "ستاتس نت %s"
+msgstr "StatusNet %s"
 
 #: actions/version.php:153
 #, php-format
@@ -4142,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
@@ -4167,15 +4176,15 @@ msgstr ""
 
 #: classes/Group_member.php:41
 msgid "Group join failed."
-msgstr "اÙ\84اÙ\86ضÙ\85اÙ\85 Ù\84Ù\84Ù\85جÙ\85Ù\88عÙ\87 فشل."
+msgstr "دخÙ\88Ù\84 Ø§Ù\84جرÙ\88Ù¾ فشل."
 
 #: classes/Group_member.php:53
 msgid "Not part of group."
-msgstr "Ù\84Ù\8aس Ø¬Ø²Ø¡Ø§ Ù\85Ù\86 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87."
+msgstr "Ù\85Ø´ Ø¬Ø²Ø¡ Ù\85Ù\86 Ø§Ù\84جرÙ\88Ù¾."
 
 #: classes/Group_member.php:60
 msgid "Group leave failed."
-msgstr "ترÙ\83 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 فشل."
+msgstr "اÙ\84خرÙ\88ج Ù\85Ù\86 Ø§Ù\84جرÙ\88Ù¾ فشل."
 
 #: classes/Login_token.php:76
 #, php-format
@@ -4236,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"
@@ -4246,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 "تعذّر ضبط عضويه المجموعه."
 
@@ -4477,7 +4486,7 @@ msgstr ""
 
 #: lib/adminpanelaction.php:107
 msgid "Changes to that panel are not allowed."
-msgstr "اÙ\84تغÙ\8aÙ\8aرات Ù\84Ù\87Ø°Ù\87 Ø§Ù\84Ù\84Ù\88Ø­Ù\87 ØºÙ\8aر Ù\85سÙ\85Ù\88Ø­ Ø¨Ù\87ا."
+msgstr "اÙ\84تغÙ\8aÙ\8aرات Ù\85Ø´ Ù\85سÙ\85Ù\88Ø­Ù\87 Ù\84Ù\84Ù\80 Ù\84Ù\88Ø­Ù\87 Ø¯Ù\89."
 
 #: lib/adminpanelaction.php:206
 msgid "showForm() not implemented."
@@ -4518,11 +4527,11 @@ msgstr "ضبط المسارات"
 msgid "Sessions configuration"
 msgstr "ضبط التصميم"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -4542,11 +4551,11 @@ msgstr ""
 
 #: lib/applicationeditform.php:207
 msgid "Describe your application"
-msgstr "اÙ\88صÙ\81 ØªØ·Ø¨Ù\8aÙ\82ك"
+msgstr "اÙ\88صÙ\81 Ø§Ù\84application Ø¨ØªØ§Ø¹Øªك"
 
 #: lib/applicationeditform.php:216
 msgid "Source URL"
-msgstr "مسار المصدر"
+msgstr "Source URL"
 
 #: lib/applicationeditform.php:218
 msgid "URL of the homepage of this application"
@@ -4590,7 +4599,7 @@ msgstr ""
 
 #: lib/applicationlist.php:154
 msgid "Revoke"
-msgstr "اسحب"
+msgstr "بطÙ\91Ù\84"
 
 #: lib/attachmentlist.php:87
 msgid "Attachments"
@@ -4614,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"
@@ -4639,7 +4648,7 @@ msgstr ""
 #: lib/command.php:88
 #, php-format
 msgid "Could not find a user with nickname %s"
-msgstr "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 Ø¥Ù\8aجاد Ù\85ستخدÙ\85 Ø¨Ø§Ù\84اسم %s"
+msgstr "Ù\85ا Ù\86Ù\81عش Ù\8aÙ\84اÙ\82Ù\89 Ù\8aÙ\88زر Ø¨Ø¥سم %s"
 
 #: lib/command.php:92
 msgid "It does not make a lot of sense to nudge yourself!"
@@ -4648,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
@@ -4663,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
@@ -4676,12 +4685,12 @@ msgstr ""
 
 #: lib/command.php:217
 msgid "You are already a member of that group"
-msgstr "Ø£Ù\86ت Ø¨Ø§Ù\84Ù\81عÙ\84 Ø¹Ø¶Ù\88 Ù\81Ù\89 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85جÙ\85Ù\88عة"
+msgstr "اÙ\86ت Ø§ØµÙ\84ا Ø¹Ø¶Ù\88 Ù\81Ù\89 Ø§Ù\84جرÙ\88Ù¾ Ø¯Ù\87"
 
 #: lib/command.php:231
 #, php-format
 msgid "Could not join user %s to group %s"
-msgstr "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 Ø¶Ù\85 Ø§Ù\84Ù\85ستخدÙ\85 %s Ø¥Ù\84Ù\89 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 %s"
+msgstr "Ù\85ا Ù\86Ù\81عش Ù\8aدخÙ\84 Ø§Ù\84Ù\8aÙ\88زر %s Ù\84جرÙ\88Ù¾ %s"
 
 #: lib/command.php:236
 #, php-format
@@ -4691,12 +4700,12 @@ msgstr "%s انضم إلى مجموعه %s"
 #: lib/command.php:275
 #, php-format
 msgid "Could not remove user %s to group %s"
-msgstr "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 Ø¥Ø²Ø§Ù\84Ù\87 Ø§Ù\84Ù\85ستخدÙ\85 %s Ù\85Ù\86 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 %s"
+msgstr "Ù\85ا Ù\86Ù\81عش Ù\8aØ´Ù\8aÙ\84 Ø§Ù\84Ù\8aÙ\88زر %s Ù\84جرÙ\88Ù¾ %s"
 
 #: lib/command.php:280
 #, php-format
 msgid "%s left group %s"
-msgstr "%s ØªØ±Ù\83 Ø§Ù\84Ù\85جÙ\85Ù\88عÙ\87 %s"
+msgstr "%s Ø³Ø§Ø¨ Ø§Ù\84جرÙ\88Ù¾ %s"
 
 #: lib/command.php:309
 #, php-format
@@ -4726,7 +4735,7 @@ msgstr ""
 #: lib/command.php:367
 #, php-format
 msgid "Direct message to %s sent"
-msgstr "رساÙ\84Ù\87 Ù\85باشرÙ\87 Ø¥Ù\84Ù\89 %s ØªÙ\85 Ø¥Ø±Ø³Ø§Ù\84Ù\87ا"
+msgstr "رساÙ\84Ù\87 Ù\85باشرÙ\87 Ø§ØªØ¨Ø¹ØªØª Ù\84Ù\80 %s"
 
 #: lib/command.php:369
 msgid "Error sending direct message."
@@ -4734,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"
@@ -4923,7 +4932,7 @@ msgstr ""
 
 #: lib/connectsettingsaction.php:120
 msgid "Connections"
-msgstr "اتصالات"
+msgstr "كونيكشونات (Connections)"
 
 #: lib/connectsettingsaction.php:121
 msgid "Authorized connected applications"
@@ -5119,7 +5128,7 @@ msgstr "[%s]"
 #: lib/jabber.php:400
 #, php-format
 msgid "Unknown inbox source %d."
-msgstr "Ù\85صدر ØµÙ\86دÙ\88Ù\82 Ù\88ارد ØºÙ\8aر معروف %d."
+msgstr "Ù\85صدر Ø§Ù\84Ù\80inbox Ù\85Ø´ معروف %d."
 
 #: lib/joinform.php:114
 msgid "Join"
@@ -5181,7 +5190,7 @@ msgstr ""
 #: lib/mail.php:258
 #, php-format
 msgid "Bio: %s"
-msgstr "اÙ\84سÙ\8aرة: %s"
+msgstr "عÙ\86 Ù\86Ù\81سÙ\83: %s"
 
 #: lib/mail.php:286
 #, php-format
@@ -5334,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."
@@ -5376,7 +5385,7 @@ msgstr ""
 
 #: lib/mediafile.php:201 lib/mediafile.php:237
 msgid "Could not determine file's MIME type."
-msgstr "Ù\84Ù\85 Ù\8aÙ\85Ù\83Ù\86 ØªØ­Ø¯Ù\8aد Ù\86Ù\88ع MIME Ù\84Ù\84Ù\85Ù\84Ù\81."
+msgstr "Ù\85Ø´ Ù\86اÙ\81ع Ù\8aتحدد Ù\86Ù\88ع Ø§Ù\84Ù\80MIME Ø¨ØªØ§Ø¹ Ø§Ù\84Ù\81اÙ\8aÙ\84."
 
 #: lib/mediafile.php:270
 #, php-format
@@ -5419,11 +5428,11 @@ msgstr "أرفق ملفًا"
 
 #: lib/noticeform.php:212
 msgid "Share my location"
-msgstr "شارÙ\83 Ù\85Ù\88Ù\82عى"
+msgstr "اعÙ\85Ù\84 Ù\85شارÙ\83Ù\87 Ù\84Ù\85Ù\83اÙ\86ى"
 
 #: lib/noticeform.php:215
 msgid "Do not share my location"
-msgstr "Ù\84ا ØªØ´Ø§Ø±Ù\83 Ù\85Ù\88Ù\82عÙ\8a"
+msgstr "Ù\85ا ØªØ¹Ù\85Ù\84Ø´ Ù\85شارÙ\83Ù\87 Ù\84Ù\85Ù\83اÙ\86Ù\89"
 
 #: lib/noticeform.php:216
 msgid ""
@@ -5504,11 +5513,11 @@ msgstr "خطأ أثناء إدراج الملف الشخصى البعيد"
 msgid "Duplicate notice"
 msgstr "ضاعف الإشعار"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "تعذّر إدراج اشتراك جديد."
 
@@ -5547,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"
@@ -5782,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 "قبل سنه تقريبًا"
 
index 4697b8aacc26a3e52a923c588d4565938bb5f627..efe49b56ab42c3adca1750f6f7563cdc7d066c79 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:09+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 (r61864); 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
@@ -175,22 +174,23 @@ msgstr "Бележки от %1$s и приятели в %2$s."
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -424,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 "Ð\9eпиÑ\82айÑ\82е Ð´Ñ\80Ñ\83г Ð¿Ñ\81евдоним, Ñ\82ози Ð²ÐµÑ\87е Ðµ Ð·Ð°ÐµÑ\82."
+msgstr "Ð\9fÑ\81евдонимÑ\8aÑ\82 \"%s\" Ð²ÐµÑ\87е Ðµ Ð·Ð°ÐµÑ\82. Ð\9eпиÑ\82айÑ\82е Ð´Ñ\80Ñ\83г."
 
 #: actions/apigroupcreate.php:286 actions/editgroup.php:234
 #: actions/newgroup.php:178
@@ -561,7 +561,8 @@ msgstr "Сметка"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Псевдоним"
@@ -751,7 +752,7 @@ msgstr "Оригинал"
 msgid "Preview"
 msgstr "Преглед"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Изтриване"
@@ -815,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 "Блокиране на потребителя"
 
@@ -900,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
@@ -1449,7 +1449,7 @@ msgstr "Тази бележка вече е отбелязана като люб
 msgid "Disfavor favorite"
 msgstr "Нелюбимо"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Популярни бележки"
@@ -1596,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 "Блокиране на потребителя"
@@ -1699,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 ""
 
@@ -2055,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."
@@ -2110,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 "За да редактирате групата, трябва да сте й администратор."
@@ -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 "Неподдържан формат на данните"
 
@@ -2341,7 +2341,6 @@ msgid "Notice Search"
 msgstr "Търсене на бележки"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
 msgstr "Други настройки"
 
@@ -2617,7 +2616,6 @@ msgid "When to use SSL"
 msgstr "Кога да се използва SSL"
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
 msgstr "SSL-сървър"
 
@@ -2708,7 +2706,7 @@ msgstr "За мен"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Местоположение"
@@ -2884,7 +2882,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3093,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"
@@ -3110,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%%%%), които познавате или с които "
@@ -3319,84 +3317,87 @@ msgstr "Запазване настройките на сайта"
 msgid "You must be logged in to view an application."
 msgstr "За напуснете група, трябва да сте влезли."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Бележката няма профил"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
-msgstr ""
+msgstr "Икона"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
-#, fuzzy
 msgid "Name"
-msgstr "Ð\9fÑ\81евдоним"
+msgstr "Ð\98ме"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
-msgstr "СÑ\82Ñ\80аниÑ\80ане"
+msgstr "Ð\9eÑ\80ганизаÑ\86иÑ\8f"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Описание"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Статистики"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 #, fuzzy
 msgid "Authorize URL"
 msgstr "Автор"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+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."
@@ -3457,18 +3458,18 @@ msgid "Group profile"
 msgstr "Профил на групата"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
-msgstr ""
+msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Бележка"
 
 #: actions/showgroup.php:284 lib/groupeditform.php:184
 msgid "Aliases"
-msgstr ""
+msgstr "Псевдоними"
 
 #: actions/showgroup.php:293
 msgid "Group actions"
@@ -3654,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."
@@ -4017,7 +4018,8 @@ msgstr "Етикети"
 msgid "User profile"
 msgstr "Потребителски профил"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Снимка"
 
@@ -4076,7 +4078,7 @@ msgstr "Сървърът не е върнал адрес на профила."
 msgid "Unsubscribed"
 msgstr "Отписване"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4167,37 +4169,37 @@ msgstr ""
 "Проверете тези детайли и се уверете, че искате да се абонирате за бележките "
 "на този потребител. Ако не искате абонамента, натиснете \"Cancel\" (Отказ)."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Лиценз"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Приемане"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Абониране за този потребител"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Охвърляне"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Абонаменти на %s"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Няма заявка за одобрение."
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Абонаментът е одобрен"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4207,11 +4209,11 @@ msgstr ""
 "Абонаментът е одобрен, но не е зададен callback URL. За да завършите "
 "одобряването, проверете инструкциите на сайта. Вашият token за абонамент е:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Абонаментът е отказан"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4221,37 +4223,37 @@ msgstr ""
 "Абонаментът е отказан, но не е зададен callback URL. За да откажете напълно "
 "абонамента, проверете инструкциите на сайта."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Грешка при четене адреса на аватара '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Грешен вид изображение за '%s'"
@@ -4292,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
@@ -4332,17 +4334,15 @@ msgstr ""
 
 #: actions/version.php:189
 msgid "Plugins"
-msgstr ""
+msgstr "Приставки"
 
 #: actions/version.php:196 lib/action.php:747
-#, fuzzy
 msgid "Version"
-msgstr "СеÑ\81ии"
+msgstr "Ð\92еÑ\80Ñ\81иÑ\8f"
 
 #: actions/version.php:197
-#, fuzzy
 msgid "Author(s)"
-msgstr "Автор"
+msgstr "Автор(и)"
 
 #: classes/File.php:144
 #, php-format
@@ -4442,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"
@@ -4734,11 +4734,11 @@ msgstr "Настройка на пътищата"
 msgid "Sessions configuration"
 msgstr "Настройка на оформлението"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5410,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
@@ -5741,12 +5739,12 @@ msgstr "Грешка при вмъкване на отдалечен профи
 msgid "Duplicate notice"
 msgstr "Изтриване на бележката"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "Потребителят е забранил да се абонирате за него."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Грешка при добавяне на нов абонамент."
 
@@ -6031,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 "преди около година"
 
index 0a6356d6c7e81f76665d38a89ba7dd94440b400d..d0b228c08c882cf30adebb270e4dc2949fac6453 100644 (file)
@@ -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-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:13+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 (r61864); 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"
@@ -179,22 +180,23 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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!"
@@ -573,7 +575,8 @@ msgstr "Compte"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Sobrenom"
@@ -765,7 +768,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Vista prèvia"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Suprimeix"
@@ -831,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"
 
@@ -1466,7 +1469,7 @@ msgstr "Aquesta nota ja és favorita."
 msgid "Disfavor favorite"
 msgstr "Desfavoritar favorit"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Notificacions populars"
@@ -1611,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"
 
@@ -1712,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"
 
@@ -2129,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"
@@ -2347,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."
 
@@ -2734,7 +2737,7 @@ msgstr "Biografia"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Ubicació"
@@ -2916,7 +2919,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Núvol d'etiquetes"
 
@@ -3363,79 +3366,84 @@ msgstr "Desa els paràmetres del lloc"
 msgid "You must be logged in to view an application."
 msgstr "Has d'haver entrat per a poder marxar d'un grup."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Avís sense perfil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Nom"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Paginació"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Descripció"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Estadístiques"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 #, fuzzy
 msgid "Authorize URL"
 msgstr "Autoria"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "N'estàs segur que vols eliminar aquesta notificació?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3500,12 +3508,12 @@ msgid "Group profile"
 msgstr "Perfil del grup"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Avisos"
 
@@ -4070,7 +4078,8 @@ msgstr "Etiqueta %s"
 msgid "User profile"
 msgstr "Perfil de l'usuari"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Foto"
 
@@ -4132,7 +4141,7 @@ msgstr "No id en el perfil sol·licitat."
 msgid "Unsubscribed"
 msgstr "No subscrit"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4220,36 +4229,36 @@ msgstr ""
 "subscriure't als avisos d'aquest usuari. Si no has demanat subscriure't als "
 "avisos de ningú, clica \"Cancel·lar\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Llicència"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Accepta"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Subscriure's a aquest usuari"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Rebutja"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Rebutja la subscripció"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Cap petició d'autorització!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Subscripció autoritzada"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4260,11 +4269,11 @@ msgstr ""
 "Llegeix de nou les instruccions per a saber com autoritzar la subscripció. "
 "El teu identificador de subscripció és:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Subscripció rebutjada"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4274,37 +4283,37 @@ msgstr ""
 "S'ha rebutjat la subscripció, però no s'ha enviat un URL de retorn. Llegeix "
 "de nou les instruccions per a saber com rebutjar la subscripció completament."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "No es pot llegir l'URL de l'avatar '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Tipus d'imatge incorrecte per a '%s'"
@@ -4494,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)"
@@ -4782,11 +4791,11 @@ msgstr "Configuració dels camins"
 msgid "Sessions configuration"
 msgstr "Configuració del disseny"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5111,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 ""
@@ -5790,11 +5799,11 @@ msgstr "Error en inserir perfil remot"
 msgid "Duplicate notice"
 msgstr "Eliminar nota."
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Se us ha banejat la subscripció."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "No s'ha pogut inserir una nova subscripció."
 
@@ -6076,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"
 
index c61d3dbf00e44485f034e7c00edcd40e5893b9a0..a5d6db6003143267952bd425aa210d553f24ae88 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:16+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 (r61864); 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"
@@ -180,22 +180,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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"
@@ -570,7 +571,8 @@ msgstr "O nás"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Přezdívka"
@@ -765,7 +767,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Odstranit"
@@ -832,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"
 
@@ -1462,7 +1464,7 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 #, fuzzy
 msgid "Popular notices"
@@ -1617,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."
@@ -1721,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 ""
 
@@ -2104,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."
@@ -2317,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 ""
 
@@ -2711,7 +2713,7 @@ msgstr "O mě"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Umístění"
@@ -2889,7 +2891,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3312,80 +3314,84 @@ msgstr "Nastavení"
 msgid "You must be logged in to view an application."
 msgstr ""
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Sdělení nemá profil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Přezdívka"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Umístění"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 #, fuzzy
 msgid "Description"
 msgstr "Odběry"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistiky"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3451,12 +3457,12 @@ msgid "Group profile"
 msgstr "Žádné takové oznámení."
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Poznámka"
 
@@ -4014,7 +4020,8 @@ msgstr ""
 msgid "User profile"
 msgstr "Uživatel nemá profil."
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4076,7 +4083,7 @@ msgstr "Nebylo vráceno žádné URL profilu od servu."
 msgid "Unsubscribed"
 msgstr "Odhlásit"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4167,38 +4174,38 @@ msgstr ""
 "sdělení tohoto uživatele. Pokud ne, ask to subscribe to somone's notices, "
 "klikněte na \"Zrušit\""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licence"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Přijmout"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "Odběr autorizován"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Odmítnout"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Všechny odběry"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Žádné potvrení!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Odběr autorizován"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4209,11 +4216,11 @@ msgstr ""
 "nápovědě jak správně postupovat při potvrzování odběru. Váš řetězec odběru "
 "je:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Odběr odmítnut"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4223,37 +4230,37 @@ msgstr ""
 "Odebírání bylo zamítnuto, ale neprošla žádná callback adresa. Zkontrolujte v "
 "nápovědě jak správně postupovat při zamítání odběru"
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Nelze přečíst adresu obrázku '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Neplatný typ obrázku pro '%s'"
@@ -4437,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 ""
@@ -4735,11 +4742,11 @@ msgstr "Potvrzení emailové adresy"
 msgid "Sessions configuration"
 msgstr "Potvrzení emailové adresy"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5756,11 +5763,11 @@ msgstr "Chyba při vkládaní vzdáleného profilu"
 msgid "Duplicate notice"
 msgstr "Nové sdělení"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Nelze vložit odebírání"
 
@@ -6049,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"
 
index ca2be97ef9785f3a561d045428d0098688263ab9..b9e53e254444a04219b9a6df253bb389a9976c19 100644 (file)
@@ -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-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:19+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 (r61864); 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"
@@ -191,22 +192,23 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -572,7 +574,8 @@ msgstr "Konto"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Nutzername"
@@ -764,7 +767,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Vorschau"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Löschen"
@@ -829,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"
 
@@ -1462,7 +1465,7 @@ msgstr "Diese Nachricht ist bereits ein Favorit!"
 msgid "Disfavor favorite"
 msgstr "Aus Favoriten entfernen"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Beliebte Nachrichten"
@@ -1604,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"
 
@@ -1703,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"
 
@@ -2125,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"
@@ -2344,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."
 
@@ -2358,7 +2361,6 @@ msgid "Notice Search"
 msgstr "Nachrichtensuche"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
 msgstr "Andere Einstellungen"
 
@@ -2391,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
@@ -2416,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
@@ -2529,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."
@@ -2614,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"
@@ -2635,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"
 
@@ -2732,7 +2730,7 @@ msgstr "Biografie"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Aufenthaltsort"
@@ -2912,7 +2910,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Tag-Wolke"
 
@@ -2960,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."
@@ -3224,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
@@ -3261,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
@@ -3312,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
@@ -3362,80 +3355,85 @@ msgstr "Site-Einstellungen speichern"
 msgid "You must be logged in to view an application."
 msgstr "Du musst angemeldet sein, um aus einer Gruppe auszutreten."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Nachricht hat kein Profil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Nutzername"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Seitenerstellung"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Beschreibung"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistiken"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 #, fuzzy
 msgid "Authorize URL"
 msgstr "Autor"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3500,12 +3498,12 @@ msgid "Group profile"
 msgstr "Gruppenprofil"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Nachricht"
 
@@ -4078,7 +4076,8 @@ msgstr "Tag %s"
 msgid "User profile"
 msgstr "Benutzerprofil"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Foto"
 
@@ -4141,7 +4140,7 @@ msgstr "Keine Profil-ID in der Anfrage."
 msgid "Unsubscribed"
 msgstr "Abbestellt"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, fuzzy, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4236,38 +4235,38 @@ msgstr ""
 "dieses Nutzers abonnieren möchtest. Wenn du das nicht wolltest, klicke auf "
 "„Abbrechen“."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Lizenz"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Akzeptieren"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "Abonniere diesen Benutzer"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Ablehnen"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "%s Abonnements"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Keine Bestätigungsanfrage!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Abonnement autorisiert"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4278,11 +4277,11 @@ msgstr ""
 "zurückgegeben. Lies nochmal die Anweisungen der Site, wie Abonnements "
 "bestätigt werden. Dein Abonnement-Token ist:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Abonnement abgelehnt"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4293,37 +4292,37 @@ msgstr ""
 "zurückgegeben. Lies nochmal die Anweisungen der Site, wie Abonnements "
 "vollständig abgelehnt werden. Dein Abonnement-Token ist:"
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Konnte Avatar-URL nicht öffnen „%s“"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Falscher Bildtyp für „%s“"
@@ -4512,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)"
@@ -4804,11 +4803,11 @@ msgstr "SMS-Konfiguration"
 msgid "Sessions configuration"
 msgstr "SMS-Konfiguration"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5129,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 ""
@@ -5870,12 +5869,12 @@ msgstr "Fehler beim Einfügen des entfernten Profils"
 msgid "Duplicate notice"
 msgstr "Notiz löschen"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "Dieser Benutzer erlaubt dir nicht ihn zu abonnieren."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Konnte neues Abonnement nicht eintragen."
 
@@ -6162,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"
 
index 62184c9ef8c4a8bf710b5e6decf3c6e4232cbaf7..20365e04ad14afa652759840a37314a8c6c26a29 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:22+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 (r61864); 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"
@@ -175,22 +175,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 "Η μέθοδος του ΑΡΙ δε βρέθηκε!"
@@ -559,7 +560,8 @@ msgstr "Λογαριασμός"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Ψευδώνυμο"
@@ -748,7 +750,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Διαγραφή"
@@ -815,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 ""
 
@@ -1445,7 +1447,7 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr ""
@@ -1592,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 ""
 
@@ -1690,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 ""
 
@@ -2065,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 "Αδύνατη η αποθήκευση του προφίλ."
@@ -2275,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 ""
 
@@ -2660,7 +2662,7 @@ msgstr "Βιογραφικό"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Τοποθεσία"
@@ -2838,7 +2840,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3270,78 +3272,83 @@ msgstr "Ρυθμίσεις OpenID"
 msgid "You must be logged in to view an application."
 msgstr ""
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr ""
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Ψευδώνυμο"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Προσκλήσεις"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Περιγραφή"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr ""
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Είσαι σίγουρος ότι θες να διαγράψεις αυτό το μήνυμα;"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3407,12 +3414,12 @@ msgid "Group profile"
 msgstr "Αδύνατη η αποθήκευση του προφίλ."
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr ""
 
@@ -3961,7 +3968,8 @@ msgstr ""
 msgid "User profile"
 msgstr "Προφίλ χρήστη"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4018,7 +4026,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr ""
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4106,85 +4114,85 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Αποδοχή"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Γίνε συνδρομητής αυτού του χρήστη"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr ""
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr ""
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr ""
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4364,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 ""
@@ -4649,11 +4657,11 @@ msgstr "Επιβεβαίωση διεύθυνσης email"
 msgid "Sessions configuration"
 msgstr "Επιβεβαίωση διεύθυνσης email"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5639,11 +5647,11 @@ msgstr ""
 msgid "Duplicate notice"
 msgstr "Διαγραφή μηνύματος"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Απέτυχε η εισαγωγή νέας συνδρομής."
 
@@ -5925,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 ""
 
index 664d647d8a915018939018e132dfc508c44ec764..0e7acedc07cc187a2854a3d6322a53795c6face4 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:25+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 (r61864); 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"
@@ -26,14 +26,12 @@ msgid "Access"
 msgstr "Access"
 
 #: actions/accessadminpanel.php:65
-#, fuzzy
 msgid "Site access settings"
-msgstr "Save site settings"
+msgstr "Site access settings"
 
 #: actions/accessadminpanel.php:158
-#, fuzzy
 msgid "Registration"
-msgstr "Register"
+msgstr "Registration"
 
 #: actions/accessadminpanel.php:161
 msgid "Private"
@@ -41,7 +39,7 @@ msgstr "Private"
 
 #: actions/accessadminpanel.php:163
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
+msgstr "Prohibit anonymous users (not logged in) from viewing site?"
 
 #: actions/accessadminpanel.php:167
 msgid "Invite only"
@@ -49,7 +47,7 @@ msgstr "Invite only"
 
 #: actions/accessadminpanel.php:169
 msgid "Make registration invitation only."
-msgstr ""
+msgstr "Make registration invitation only."
 
 #: actions/accessadminpanel.php:173
 msgid "Closed"
@@ -57,7 +55,7 @@ msgstr "Closed"
 
 #: actions/accessadminpanel.php:175
 msgid "Disable new registrations."
-msgstr ""
+msgstr "Disable new registrations."
 
 #: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
 #: actions/emailsettings.php:195 actions/imsettings.php:163
@@ -72,9 +70,8 @@ msgid "Save"
 msgstr "Save"
 
 #: actions/accessadminpanel.php:189
-#, fuzzy
 msgid "Save access settings"
-msgstr "Save site settings"
+msgstr "Save access settings"
 
 #: actions/all.php:63 actions/public.php:97 actions/replies.php:92
 #: actions/showfavorites.php:137 actions/tag.php:51
@@ -172,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!"
@@ -183,22 +180,23 @@ msgstr "Updates from %1$s and friends on %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: 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:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
 msgid "API method not found."
 msgstr "API method not found."
 
@@ -482,12 +480,11 @@ msgstr "groups on %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "No oauth_token parameter provided."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Invalid size."
+msgstr "Invalid token."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -512,14 +509,12 @@ msgid "Invalid nickname / password!"
 msgstr "Invalid nickname / password!"
 
 #: actions/apioauthauthorize.php:159
-#, fuzzy
 msgid "Database error deleting OAuth application user."
-msgstr "DB error deleting OAuth app user."
+msgstr "Database error deleting OAuth application user."
 
 #: actions/apioauthauthorize.php:185
-#, fuzzy
 msgid "Database error inserting OAuth application user."
-msgstr "DB error inserting OAuth app user."
+msgstr "Database error inserting OAuth application user."
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -531,9 +526,9 @@ msgstr ""
 "token."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "The request token %s has been denied."
+msgstr "The request token %s has been denied and revoked."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -546,11 +541,11 @@ msgstr "Unexpected form submission."
 
 #: actions/apioauthauthorize.php:259
 msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "An application would like to connect to your account"
 
 #: actions/apioauthauthorize.php:276
 msgid "Allow or deny access"
-msgstr ""
+msgstr "Allow or deny access"
 
 #: actions/apioauthauthorize.php:292
 #, php-format
@@ -559,6 +554,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 ""
+"The application <strong>%1$s</strong> by <strong>%2$s</strong> would like "
+"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."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -566,7 +564,8 @@ msgstr "Account"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Nickname"
@@ -641,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."
@@ -652,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!"
@@ -668,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!"
@@ -683,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"
@@ -693,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!"
@@ -753,7 +752,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Preview"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Delete"
@@ -820,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"
 
@@ -921,20 +920,17 @@ msgid "Notices"
 msgstr "Notices"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "You must be logged in to create a group."
+msgstr "You must be logged in to delete an application."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Notice has no profile"
+msgstr "Application not found."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
-#, fuzzy
 msgid "You are not the owner of this application."
-msgstr "You are not a member of this group."
+msgstr "You are not the owner of this application."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -943,29 +939,26 @@ msgid "There was a problem with your session token."
 msgstr "There was a problem with your session token."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "No such notice."
+msgstr "Delete application"
 
 #: 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 ""
-"Are you sure you want to delete this user? This will clear all data about "
-"the user from the database, without a backup."
+"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."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Do not delete this notice"
+msgstr "Do not delete this application"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Delete this notice"
+msgstr "Delete this application"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1106,14 +1099,12 @@ msgid "Change colours"
 msgstr "Change colours"
 
 #: actions/designadminpanel.php:510 lib/designsettings.php:191
-#, fuzzy
 msgid "Content"
-msgstr "Connect"
+msgstr "Content"
 
 #: actions/designadminpanel.php:523 lib/designsettings.php:204
-#, fuzzy
 msgid "Sidebar"
-msgstr "Search"
+msgstr "Sidebar"
 
 #: actions/designadminpanel.php:536 lib/designsettings.php:217
 msgid "Text"
@@ -1148,68 +1139,58 @@ msgid "Add to favorites"
 msgstr "Add to favourites"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "No such document."
+msgstr "No such document \"%s\""
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Other options"
+msgstr "Edit Application"
 
 #: actions/editapplication.php:66
-#, fuzzy
 msgid "You must be logged in to edit an application."
-msgstr "You must be logged in to create a group."
+msgstr "You must be logged in to edit an application."
 
 #: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
 #: actions/showapplication.php:87
-#, fuzzy
 msgid "No such application."
-msgstr "No such notice."
+msgstr "No such application."
 
 #: actions/editapplication.php:161
-#, fuzzy
 msgid "Use this form to edit your application."
-msgstr "Use this form to edit the group."
+msgstr "Use this form to edit your application."
 
 #: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
 msgid "Name is required."
-msgstr "Same as password above. Required."
+msgstr "Name is required."
 
 #: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
 msgid "Name is too long (max 255 chars)."
-msgstr "Full name is too long (max 255 chars)."
+msgstr "Name is too long (max 255 chars)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "Nickname already in use. Try another one."
+msgstr "Name already in use. Try another one."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "Description"
+msgstr "Description is required."
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
-msgstr ""
+msgstr "Source URL is too long."
 
 #: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
 msgid "Source URL is not valid."
-msgstr "Homepage is not a valid URL."
+msgstr "Source URL is not valid."
 
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr "Organisation is required."
 
 #: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
 msgid "Organization is too long (max 255 chars)."
-msgstr "Location is too long (max 255 chars)."
+msgstr "Organisation is too long (max 255 chars)."
 
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
@@ -1217,16 +1198,15 @@ msgstr "Organisation homepage is required."
 
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
-msgstr ""
+msgstr "Callback is too long."
 
 #: actions/editapplication.php:225 actions/newapplication.php:215
 msgid "Callback URL is not valid."
-msgstr ""
+msgstr "Callback URL is not valid."
 
 #: actions/editapplication.php:258
-#, fuzzy
 msgid "Could not update application."
-msgstr "Could not update group."
+msgstr "Could not update application."
 
 #: actions/editgroup.php:56
 #, php-format
@@ -1239,9 +1219,8 @@ msgstr "You must be logged in to create a group."
 
 #: 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 "You must be an admin to edit the group"
+msgstr "You must be an admin to edit the group."
 
 #: actions/editgroup.php:154
 msgid "Use this form to edit the group."
@@ -1256,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"
 
@@ -1451,7 +1430,7 @@ msgstr "This notice is already a favourite!"
 msgid "Disfavor favorite"
 msgstr "Disfavor favourite"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Popular notices"
@@ -1509,29 +1488,25 @@ msgid "Featured users, page %d"
 msgstr "Featured users, page %d"
 
 #: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "A selection of some great users on %s"
-msgstr "A selection of some of the great users on %s"
+msgstr "A selection of some great users on %s"
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "No notice."
+msgstr "No notice ID."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
 msgstr "No notice."
 
 #: actions/file.php:42
-#, fuzzy
 msgid "No attachments."
-msgstr "No such document."
+msgstr "No attachments."
 
 #: actions/file.php:51
-#, fuzzy
 msgid "No uploaded attachments."
-msgstr "No such document."
+msgstr "No uploaded attachments."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
@@ -1606,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"
@@ -1714,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 ""
 
@@ -2128,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"
@@ -2348,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."
 
@@ -2682,9 +2657,9 @@ msgid "Invalid notice content"
 msgstr "Invalid notice content"
 
 #: actions/postnotice.php:90
-#, fuzzy, php-format
+#, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr "Notice licence ‘%s’ is not compatible with site licence ‘%s’."
+msgstr "Notice licence ‘1%$s’ is not compatible with site licence ‘%2$s’."
 
 #: actions/profilesettings.php:60
 msgid "Profile settings"
@@ -2734,7 +2709,7 @@ msgstr "Bio"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Location"
@@ -2919,7 +2894,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Tag cloud"
 
@@ -2956,6 +2931,8 @@ msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
 "the email address you have stored in your account."
 msgstr ""
+"If you have forgotten or lost your password, you can get a new one sent to "
+"the e-mail address you have stored in your account."
 
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
@@ -2967,7 +2944,7 @@ msgstr ""
 
 #: actions/recoverpassword.php:191
 msgid "Nickname or email address"
-msgstr ""
+msgstr "Nickname or e-mail address"
 
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
@@ -3128,7 +3105,7 @@ msgstr ""
 "number."
 
 #: 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"
@@ -3145,18 +3122,18 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Congratulations, %s! And welcome to %%%%site.name%%%%. From here, you may "
+"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
 "want to...\n"
 "\n"
-"* Go to [your profile](%s) and post your first message.\n"
+"* Go to [your profile](%2$s) and post your first message.\n"
 "* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send "
 "notices through instant messages.\n"
 "* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that "
-"share your interests. \n"
+"share your interests.  \n"
 "* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
-"others more about you. \n"
+"others more about you.  \n"
 "* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
-"missed. \n"
+"missed.  \n"
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 
@@ -3361,79 +3338,84 @@ msgstr "Save site settings"
 msgid "You must be logged in to view an application."
 msgstr "You must be logged in to leave a group."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Notice has no profile"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Nickname"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Pagination"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Description"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistics"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr ""
+msgstr "Authorise URL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Are you sure you want to delete this notice?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3463,6 +3445,8 @@ msgid ""
 "You haven't chosen any favorite notices yet. Click the fave button on "
 "notices you like to bookmark them for later or shed a spotlight on them."
 msgstr ""
+"You haven't chosen any favourite notices yet. Click the fave button on "
+"notices you like to bookmark them for later or shed a spotlight on them."
 
 #: actions/showfavorites.php:207
 #, php-format
@@ -3470,6 +3454,8 @@ msgid ""
 "%s hasn't added any notices to his favorites yet. Post something interesting "
 "they would add to their favorites :)"
 msgstr ""
+"%s hasn't added any notices to his favourites yet. Post something "
+"interesting they would add to their favourites :)"
 
 #: actions/showfavorites.php:211
 #, php-format
@@ -3478,6 +3464,9 @@ msgid ""
 "account](%%%%action.register%%%%) and then post something interesting they "
 "would add to their favorites :)"
 msgstr ""
+"%s hasn't added any notices to his favourites yet. Why not [register an "
+"account](%%%%action.register%%%%) and then post something interesting they "
+"would add to their favourites :)"
 
 #: actions/showfavorites.php:242
 msgid "This is a way to share what you like."
@@ -3498,12 +3487,12 @@ msgid "Group profile"
 msgstr "Group profile"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Note"
 
@@ -3562,6 +3551,11 @@ msgid ""
 "their life and interests. [Join now](%%%%action.register%%%%) to become part "
 "of this group and many more! ([Read more](%%%%doc.help%%%%))"
 msgstr ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. [Join now](%%%%action.register%%%%) to become part "
+"of this group and many more! ([Read more](%%%%doc.help%%%%))"
 
 #: actions/showgroup.php:454
 #, fuzzy, php-format
@@ -3724,7 +3718,7 @@ msgstr ""
 
 #: actions/siteadminpanel.php:183
 msgid "Minimum text limit is 140 characters."
-msgstr ""
+msgstr "Minimum text limit is 140 characters."
 
 #: actions/siteadminpanel.php:189
 msgid "Dupe limit must 1 or more seconds."
@@ -3759,9 +3753,8 @@ msgid "URL used for credits link in footer of each page"
 msgstr ""
 
 #: actions/siteadminpanel.php:257
-#, fuzzy
 msgid "Contact email address for your site"
-msgstr "New e-mail address for posting to %s"
+msgstr "Contact e-mail address for your site"
 
 #: actions/siteadminpanel.php:263
 #, fuzzy
@@ -4071,7 +4064,8 @@ msgstr "Tag %s"
 msgid "User profile"
 msgstr "User profile"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Photo"
 
@@ -4132,7 +4126,7 @@ msgstr "No profile id in request."
 msgid "Unsubscribed"
 msgstr "Unsubscribed"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, fuzzy, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4224,36 +4218,36 @@ msgstr ""
 "user's notices. If you didn't just ask to subscribe to someone's notices, "
 "click \"Cancel\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "License"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Accept"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Subscribe to this user"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Reject"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Reject this subscription"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "No authorisation request!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Subscription authorised"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4264,11 +4258,11 @@ msgstr ""
 "with the site's instructions for details on how to authorise the "
 "subscription. Your subscription token is:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Subscription rejected"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4279,37 +4273,37 @@ msgstr ""
 "with the site's instructions for details on how to fully reject the "
 "subscription."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Can't read avatar URL '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Wrong image type for '%s'"
@@ -4372,6 +4366,10 @@ msgid ""
 "Software Foundation, either version 3 of the License, or (at your option) "
 "any later version. "
 msgstr ""
+"StatusNet is free software: you can redistribute it and/or modify it under "
+"the terms of the GNU Affero General Public Licence as published by the Free "
+"Software Foundation, either version 3 of the Licence, or (at your option) "
+"any later version. "
 
 #: actions/version.php:174
 msgid ""
@@ -4380,6 +4378,10 @@ msgid ""
 "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License "
 "for more details. "
 msgstr ""
+"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 Licence "
+"for more details. "
 
 #: actions/version.php:180
 #, php-format
@@ -4387,6 +4389,8 @@ msgid ""
 "You should have received a copy of the GNU Affero General Public License "
 "along with this program.  If not, see %s."
 msgstr ""
+"You should have received a copy of the GNU Affero General Public Licence "
+"along with this program.  If not, see %s."
 
 #: actions/version.php:189
 msgid "Plugins"
@@ -4497,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)"
@@ -4507,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."
 
@@ -4788,11 +4792,11 @@ msgstr "SMS confirmation"
 msgid "Sessions configuration"
 msgstr "Design configuration"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -4827,12 +4831,11 @@ msgstr "URL of the homepage or blog of the group or topic"
 
 #: lib/applicationeditform.php:224
 msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organisation responsible for this application"
 
 #: lib/applicationeditform.php:230
-#, fuzzy
 msgid "URL for the homepage of the organization"
-msgstr "URL of the homepage or blog of the group or topic"
+msgstr "URL for the homepage of the organisation"
 
 #: lib/applicationeditform.php:236
 msgid "URL to redirect to after authentication"
@@ -5803,11 +5806,11 @@ msgstr "Error inserting remote profile."
 msgid "Duplicate notice"
 msgstr "Duplicate notice"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "You have been banned from subscribing."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Couldn't insert new subscription."
 
@@ -6088,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"
 
index 2946666aad7083484378cf27d3a299cca5f35e9d..0d7c9384a1acb77266961df2b87d37ec49849cf0 100644 (file)
@@ -12,12 +12,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:28+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 (r61864); 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!"
@@ -175,25 +183,25 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
-#, fuzzy
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: 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: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
@@ -214,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."
 
@@ -230,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."
 
@@ -255,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!"
@@ -302,9 +308,9 @@ msgid "No message text!"
 msgstr "¡Sin texto de mensaje!"
 
 #: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max message size is %d chars."
-msgstr "Demasiado largo. Máximo 140 caracteres.  "
+msgstr "Demasiado largo. Tamaño máx. de los mensajes es %d caracteres."
 
 #: actions/apidirectmessagenew.php:146
 msgid "Recipient user not found."
@@ -369,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
@@ -417,27 +423,26 @@ 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
 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
-#, fuzzy
 msgid "Group not found!"
-msgstr "¡No se encontró el método de la API!"
+msgstr "¡No se ha encontrado el grupo!"
 
 #: actions/apigroupjoin.php:110 actions/joingroup.php:90
 msgid "You are already a member of that group."
@@ -445,21 +450,21 @@ msgstr "Ya eres miembro de ese grupo"
 
 #: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
 msgid "You have been blocked from that group by the admin."
-msgstr ""
+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,11 +547,11 @@ 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"
-msgstr ""
+msgstr "Permitir o denegar el acceso"
 
 #: actions/apioauthauthorize.php:292
 #, php-format
@@ -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"
@@ -562,7 +570,8 @@ msgstr "Cuenta"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Apodo"
@@ -574,16 +583,15 @@ msgstr "Contraseña"
 
 #: actions/apioauthauthorize.php:328
 msgid "Deny"
-msgstr ""
+msgstr "Denegar"
 
 #: actions/apioauthauthorize.php:334
-#, fuzzy
 msgid "Allow"
-msgstr "Todo"
+msgstr "Permitir"
 
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Permitir o denegar el acceso a la información de tu cuenta."
 
 #: actions/apistatusesdestroy.php:107
 msgid "This method requires a POST or DELETE."
@@ -599,14 +607,12 @@ msgid "No such notice."
 msgstr "No existe ese aviso."
 
 #: actions/apistatusesretweet.php:83
-#, fuzzy
 msgid "Cannot repeat your own notice."
-msgstr "No se puede activar notificación."
+msgstr "No puedes repetir tus propias notificaciones."
 
 #: actions/apistatusesretweet.php:91
-#, fuzzy
 msgid "Already repeated that notice."
-msgstr "Borrar este aviso"
+msgstr "Esta notificación ya se ha repetido."
 
 #: actions/apistatusesshow.php:138
 msgid "Status deleted."
@@ -618,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"
@@ -630,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
@@ -651,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
@@ -729,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
@@ -754,7 +760,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Vista previa"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Borrar"
@@ -784,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 este usuario."
 
 #: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
 msgid "Block user"
@@ -803,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
@@ -811,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
@@ -821,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."
 
@@ -840,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"
@@ -905,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"
 
@@ -924,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
@@ -946,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 ""
@@ -956,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
@@ -982,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"
@@ -999,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"
@@ -1012,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"
@@ -1025,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"
@@ -1033,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
@@ -1054,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"
@@ -1114,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"
@@ -1128,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!"
@@ -1151,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
@@ -1242,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
@@ -1308,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\""
@@ -1357,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,31 +1443,33 @@ msgstr "¡Este aviso ya está en favoritos!"
 msgid "Disfavor favorite"
 msgstr "Sacar favorito"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: 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
@@ -1494,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
@@ -1502,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
@@ -1517,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."
@@ -1559,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"
@@ -1599,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."
@@ -1609,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"
 
@@ -1620,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"
@@ -1632,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."
@@ -1642,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
@@ -1699,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."
@@ -1711,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
@@ -1753,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
@@ -1784,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
@@ -1791,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"
 
@@ -1821,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."
@@ -1840,7 +1825,6 @@ msgstr ""
 "de amigos?)"
 
 #: actions/imsettings.php:124
-#, fuzzy
 msgid "IM address"
 msgstr "Dirección de mensajería instantánea"
 
@@ -1906,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
@@ -1922,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
@@ -2001,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"
@@ -2030,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."
@@ -2089,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
@@ -2125,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"
@@ -2212,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"
@@ -2230,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
@@ -2248,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
@@ -2258,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
@@ -2265,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 ""
@@ -2288,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"
@@ -2347,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"
 
@@ -2369,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."
@@ -2379,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
@@ -2448,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"
@@ -2515,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
@@ -2527,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
@@ -2536,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."
@@ -2580,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"
@@ -2592,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
@@ -2610,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"
@@ -2628,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"
@@ -2685,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
@@ -2715,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"
@@ -2740,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"
@@ -2755,7 +2713,7 @@ msgstr "Biografía"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Ubicación"
@@ -2803,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."
@@ -2816,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."
@@ -2845,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"
@@ -2881,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
@@ -2912,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
@@ -2928,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
@@ -2937,7 +2894,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Nube de tags"
 
@@ -2980,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."
@@ -3144,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
@@ -3210,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"
@@ -3240,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
@@ -3291,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
@@ -3337,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
@@ -3358,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."
@@ -3387,79 +3336,81 @@ msgstr "Configuración de Avatar"
 msgid "You must be logged in to view an application."
 msgstr "Debes estar conectado para dejar un grupo."
 
-#: actions/showapplication.php:158
-#, fuzzy
+#: actions/showapplication.php:157
 msgid "Application profile"
-msgstr "Aviso sin perfil"
+msgstr "Perfil de la aplicación"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
-msgstr ""
+msgstr "Icono"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
-#, fuzzy
 msgid "Name"
-msgstr "Apodo"
+msgstr "Nombre"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
-msgstr "Paginación"
+msgstr "Organización"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Descripción"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Estadísticas"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
-msgstr ""
+msgstr "Acciones de la aplicación"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
-msgstr ""
+msgstr "Información de la aplicación"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr ""
+msgstr "Autorizar URL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "¿Estás seguro de que quieres eliminar este aviso?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3520,24 +3471,22 @@ 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:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
-#, fuzzy
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Nota"
 
 #: actions/showgroup.php:284 lib/groupeditform.php:184
 msgid "Aliases"
-msgstr ""
+msgstr "Alias"
 
 #: actions/showgroup.php:293
 msgid "Group actions"
@@ -3579,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
@@ -3605,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."
@@ -3632,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
@@ -3720,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."
@@ -3734,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."
@@ -3758,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\""
@@ -3797,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
@@ -3842,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"
@@ -3865,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
@@ -3896,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"
@@ -3947,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"
@@ -3985,7 +3928,6 @@ msgid "Not a local user."
 msgstr "No es usuario local."
 
 #: actions/subscribe.php:69
-#, fuzzy
 msgid "Subscribed"
 msgstr "Suscrito"
 
@@ -4100,11 +4042,11 @@ msgid "Tag %s"
 msgstr "%s tag"
 
 #: actions/tagother.php:77 lib/userprofile.php:75
-#, fuzzy
 msgid "User profile"
 msgstr "Perfil de usuario"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Foto"
 
@@ -4127,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."
@@ -4167,7 +4108,7 @@ msgstr "Ningún perfil de Id en solicitud."
 msgid "Unsubscribed"
 msgstr "Desuscrito"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4214,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
@@ -4259,37 +4199,37 @@ msgstr ""
 "avisos de este usuario. Si no pediste suscribirte a los avisos de alguien, "
 "haz clic en \"Cancelar\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licencia"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Aceptar"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "Suscribirse a este usuario"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Rechazar"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Rechazar esta suscripción"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "¡Ninguna petición de autorización!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Suscripción autorizada"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4300,11 +4240,11 @@ msgstr ""
 "Lee de nuevo las instrucciones para saber cómo autorizar la suscripción. Tu "
 "identificador de suscripción es:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Suscripción rechazada"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4315,45 +4255,44 @@ msgstr ""
 "de nuevo las instrucciones para saber cómo rechazar la suscripción "
 "completamente."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "No se puede leer el URL del avatar '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 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 ""
@@ -4371,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
@@ -4396,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 ""
@@ -4426,7 +4366,7 @@ msgstr ""
 
 #: actions/version.php:189
 msgid "Plugins"
-msgstr ""
+msgstr "Complementos"
 
 #: actions/version.php:196 lib/action.php:747
 #, fuzzy
@@ -4435,7 +4375,7 @@ msgstr "Sesiones"
 
 #: actions/version.php:197
 msgid "Author(s)"
-msgstr ""
+msgstr "Autor(es)"
 
 #: classes/File.php:144
 #, php-format
@@ -4460,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
@@ -4493,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 ""
@@ -4536,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"
@@ -4546,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."
@@ -4584,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"
@@ -4617,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"
@@ -4752,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 "
@@ -4774,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
@@ -4814,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
@@ -4824,15 +4760,14 @@ 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:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5158,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 ""
@@ -5842,11 +5777,11 @@ msgstr "Error al insertar perfil remoto"
 msgid "Duplicate notice"
 msgstr "Duplicar aviso"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Se te ha prohibido la suscripción."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "No se pudo insertar una nueva suscripción."
 
@@ -6134,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"
 
index dc3b469b74e83866d34832f4fdc64c57345b8eee..c749a41611ae8c5c50bb1542bb4565b824a18fb2 100644 (file)
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:36+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 (r61864); 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
@@ -184,22 +184,23 @@ msgstr "به روز رسانی از %1$ و دوستان در %2$"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 "رابط مورد نظر پیدا نشد."
 
@@ -562,7 +563,8 @@ msgstr "حساب کاربری"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "نام کاربری"
@@ -752,7 +754,7 @@ msgstr "اصلی"
 msgid "Preview"
 msgstr "پیش‌نمایش"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "حذف"
@@ -820,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 "کاربر را مسدود کن"
 
@@ -1449,7 +1451,7 @@ msgstr "این پیام هم اکنون دوست داشتنی شده است."
 msgid "Disfavor favorite"
 msgstr "دوست ندارم"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "آگهی‌های محبوب"
@@ -1595,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 "دسترسی کاربر به گروه را مسدود کن"
 
@@ -1691,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 "این کاربر یک مدیر شود"
 
@@ -2078,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 کرد."
@@ -2299,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 "یک قالب دادهٔ پشتیبانی‌شده نیست."
 
@@ -2681,7 +2683,7 @@ msgstr "شرح‌حال"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "موقعیت"
@@ -2853,7 +2855,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3268,80 +3270,85 @@ msgstr ""
 msgid "You must be logged in to view an application."
 msgstr "برای ترک یک گروه، شما باید وارد شده باشید."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "ابن خبر ذخیره ای ندارد ."
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "نام کاربری"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "صفحه بندى"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr ""
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "آمار"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 #, fuzzy
 msgid "Authorize URL"
 msgstr "مؤلف"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "آیا اطمینان دارید که می‌خواهید این پیام را پاک کنید؟"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3406,12 +3413,12 @@ msgid "Group profile"
 msgstr ""
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr ""
 
@@ -3961,7 +3968,8 @@ msgstr ""
 msgid "User profile"
 msgstr "پروفایل کاربر"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4016,7 +4024,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr ""
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4100,84 +4108,84 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "لیسانس"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "پذیرفتن"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "تصویب این کاریر"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "رد کردن"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr ""
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr ""
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr ""
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4361,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 ""
@@ -4639,11 +4647,11 @@ msgstr ""
 msgid "Sessions configuration"
 msgstr "پیکره بندی اصلی سایت"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5630,11 +5638,11 @@ msgstr ""
 msgid "Duplicate notice"
 msgstr ""
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr ""
 
@@ -5909,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 "حدود یک سال پیش"
 
index daa2c1cbe4655afb8b969b08fbb0fdadf553bb1a..80a85e1d1b39de42c1d20fdf3e56267f935fce19 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:32+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 (r61864); 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"
@@ -186,22 +186,23 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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!"
@@ -578,7 +579,8 @@ msgstr "Käyttäjätili"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Tunnus"
@@ -770,7 +772,7 @@ msgstr "Alkuperäinen"
 msgid "Preview"
 msgstr "Esikatselu"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Poista"
@@ -835,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ä"
 
@@ -1476,7 +1478,7 @@ msgstr "Tämä päivitys on jo suosikki!"
 msgid "Disfavor favorite"
 msgstr "Poista suosikeista"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Suosituimmat päivitykset"
@@ -1626,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ä"
 
@@ -1724,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ä"
 
@@ -2142,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"
@@ -2363,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."
 
@@ -2760,7 +2762,7 @@ msgstr "Tietoja"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Kotipaikka"
@@ -2941,7 +2943,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Tagipilvi"
 
@@ -3395,79 +3397,84 @@ msgstr "Profiilikuva-asetukset"
 msgid "You must be logged in to view an application."
 msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Päivitykselle ei ole profiilia"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Tunnus"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Sivutus"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Kuvaus"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Tilastot"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Oletko varma että haluat poistaa tämän päivityksen?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3532,12 +3539,12 @@ msgid "Group profile"
 msgstr "Ryhmän profiili"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Huomaa"
 
@@ -4102,7 +4109,8 @@ msgstr "Tagi %s"
 msgid "User profile"
 msgstr "Käyttäjän profiili"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Kuva"
 
@@ -4166,7 +4174,7 @@ msgstr "Ei profiili id:tä kyselyssä."
 msgid "Unsubscribed"
 msgstr "Tilaus lopetettu"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4261,37 +4269,37 @@ msgstr ""
 "päivitykset. Jos et valinnut haluavasi tilata jonkin käyttäjän päivityksiä, "
 "paina \"Peruuta\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Lisenssi"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Hyväksy"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Tilaa tämä käyttäjä"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Hylkää"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Käyttäjän %s tilaukset"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Ei valtuutuspyyntöä!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Tilaus sallittu"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4302,11 +4310,11 @@ msgstr ""
 "saatu. Tarkista sivuston ohjeet miten päivityksen tilaus hyväksytään. "
 "Tilauskoodisi on:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Tilaus hylätty"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4316,37 +4324,37 @@ msgstr ""
 "Päivityksen tilaus on hylätty, mutta callback-osoitetta palveluun ei ole "
 "saatu. Tarkista sivuston ohjeet miten päivityksen tilaus hylätään kokonaan."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Kuvan URL-osoitetta '%s' ei voi avata."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Kuvan '%s' tyyppi on väärä"
@@ -4534,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)"
@@ -4829,11 +4837,11 @@ msgstr "SMS vahvistus"
 msgid "Sessions configuration"
 msgstr "SMS vahvistus"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5855,12 +5863,12 @@ msgstr "Virhe tapahtui uuden etäprofiilin lisäämisessä"
 msgid "Duplicate notice"
 msgstr "Poista päivitys"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "Käyttäjä on estänyt sinua tilaamasta päivityksiä."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Ei voitu lisätä uutta tilausta."
 
@@ -6151,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"
 
index b6c896cf032b1683fee2c04b47d9fd165cb95c1d..9fb5e88b2b2c1347bf1fccca95343edf93be8b80 100644 (file)
@@ -14,12 +14,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:39+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 (r61864); 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"
@@ -31,7 +31,7 @@ msgstr "Accès"
 
 #: actions/accessadminpanel.php:65
 msgid "Site access settings"
-msgstr "Paramètres d'accès au site"
+msgstr "Paramètres daccès au site"
 
 #: actions/accessadminpanel.php:158
 msgid "Registration"
@@ -51,7 +51,7 @@ msgstr "Sur invitation uniquement"
 
 #: actions/accessadminpanel.php:169
 msgid "Make registration invitation only."
-msgstr "Rendre l’inscription sur invitation seulement."
+msgstr "Autoriser l’inscription sur invitation seulement."
 
 #: actions/accessadminpanel.php:173
 msgid "Closed"
@@ -75,7 +75,7 @@ msgstr "Enregistrer"
 
 #: actions/accessadminpanel.php:189
 msgid "Save access settings"
-msgstr "Sauvegarder les paramètres d'accès"
+msgstr "Sauvegarder les paramètres daccès"
 
 #: actions/all.php:63 actions/public.php:97 actions/replies.php:92
 #: actions/showfavorites.php:137 actions/tag.php:51
@@ -111,7 +111,7 @@ msgstr "Utilisateur non trouvé."
 #: actions/all.php:84
 #, php-format
 msgid "%1$s and friends, page %2$d"
-msgstr "!%1$s et amis, page %2$d"
+msgstr "%1$s et ses amis, page %2$d"
 
 #: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
 #: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
@@ -186,22 +186,23 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 !"
 
@@ -463,7 +464,7 @@ msgstr "Impossible de joindre l’utilisateur %1$s au groupe %2$s."
 
 #: actions/apigroupleave.php:114
 msgid "You are not a member of this group."
-msgstr "Vous n'êtes pas membre de ce groupe."
+msgstr "Vous nêtes pas membre de ce groupe."
 
 #: actions/apigroupleave.php:124 actions/leavegroup.php:119
 #, php-format
@@ -487,12 +488,11 @@ msgstr "groupes sur %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Paramètre oauth_token non fourni."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Taille incorrecte."
+msgstr "Jeton incorrect."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -516,18 +516,18 @@ msgstr ""
 
 #: actions/apioauthauthorize.php:135
 msgid "Invalid nickname / password!"
-msgstr "Identifiant ou mot de passe incorrect !"
+msgstr "Pseudo ou mot de passe incorrect !"
 
 #: actions/apioauthauthorize.php:159
 msgid "Database error deleting OAuth application user."
 msgstr ""
-"Erreur de la base de données lors de la suppression de l'utilisateur de "
-"l'application OAuth."
+"Erreur de la base de données lors de la suppression de lutilisateur de "
+"lapplication OAuth."
 
 #: actions/apioauthauthorize.php:185
 msgid "Database error inserting OAuth application user."
 msgstr ""
-"Erreur de base de donnée en insérant l'utilisateur de l'application OAuth"
+"Erreur de base de donnée en insérant l’utilisateur de l’application OAuth"
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -535,13 +535,13 @@ msgid ""
 "The request token %s has been authorized. Please exchange it for an access "
 "token."
 msgstr ""
-"Le jeton de connexion %s a été autorisé. Merci de l'échanger contre un jeton "
-"d'accès."
+"Le jeton de connexion %s a été autorisé. Merci de léchanger contre un jeton "
+"daccès."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "Le jeton de connexion %s a été refusé."
+msgstr "Le jeton de connexion %s a été refusé et révoqué."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -555,11 +555,11 @@ msgstr "Soumission de formulaire inattendue."
 #: actions/apioauthauthorize.php:259
 msgid "An application would like to connect to your account"
 msgstr ""
-"Une application vous demande l'autorisation de se connecter à votre compte"
+"Une application vous demande lautorisation de se connecter à votre compte"
 
 #: actions/apioauthauthorize.php:276
 msgid "Allow or deny access"
-msgstr "Autoriser ou refuser l'accès"
+msgstr "Autoriser ou refuser laccès"
 
 #: actions/apioauthauthorize.php:292
 #, php-format
@@ -568,6 +568,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 ""
+"L’application <strong>%1$s</strong> de <strong>%2$s</strong> voudrait "
+"pouvoir <strong>%3$s</strong> les données de votre compte %4$s. Vous ne "
+"devriez donner l’accès à votre compte %4$s qu’aux tiers à qui vous faites "
+"confiance."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -575,7 +579,8 @@ msgstr "Compte"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Pseudo"
@@ -595,7 +600,7 @@ msgstr "Autoriser"
 
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
-msgstr "Autoriser ou refuser l'accès à votre compte."
+msgstr "Autoriser ou refuser laccès à votre compte."
 
 #: actions/apistatusesdestroy.php:107
 msgid "This method requires a POST or DELETE."
@@ -766,7 +771,7 @@ msgstr "Image originale"
 msgid "Preview"
 msgstr "Aperçu"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Supprimer"
@@ -813,9 +818,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 ""
-"Êtes-vous certain de vouloir bloquer cet utilisateur ? Après cela, il ne "
-"sera plus abonné à votre compte, ne pourra plus s’y abonner de nouveau, et "
-"vous ne serez pas informé des @-réponses de sa part."
+"Voulez-vous vraiment bloquer cet utilisateur ? Après cela, il ne sera plus "
+"abonné à votre compte, ne pourra plus s’y abonner de nouveau, et vous ne "
+"serez pas informé des @-réponses de sa part."
 
 #: actions/block.php:143 actions/deleteapplication.php:153
 #: actions/deletenotice.php:145 actions/deleteuser.php:147
@@ -833,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"
 
@@ -934,19 +939,17 @@ msgid "Notices"
 msgstr "Avis"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Vous devez être connecté pour modifier une application."
+msgstr "Vous devez être connecté pour supprimer une application."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Informations sur l'application"
+msgstr "Application non trouvée."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
 msgid "You are not the owner of this application."
-msgstr "Vous n'êtes pas le propriétaire de cette application."
+msgstr "Vous nêtes pas le propriétaire de cette application."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -955,29 +958,26 @@ msgid "There was a problem with your session token."
 msgstr "Un problème est survenu avec votre jeton de session."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Modifier votre application"
+msgstr "Supprimer l’application"
 
 #: 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 ""
-"Êtes-vous certain de vouloir supprimer cet utilisateur ? Ceci effacera "
-"toutes les données à son propos de la base de données, sans sauvegarde."
+"Voulez-vous vraiment supprimer cette application ? Ceci effacera toutes les "
+"données à son propos de la base de données, y compris toutes les connexions "
+"utilisateur existantes."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Ne pas supprimer cet avis"
+msgstr "Ne pas supprimer cette application"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Icône pour cette application"
+msgstr "Supprimer cette application"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1007,7 +1007,7 @@ msgstr "Supprimer cet avis"
 
 #: actions/deletenotice.php:144
 msgid "Are you sure you want to delete this notice?"
-msgstr "Êtes-vous sûr(e) de vouloir supprimer cet avis ?"
+msgstr "Voulez-vous vraiment supprimer cet avis ?"
 
 #: actions/deletenotice.php:145
 msgid "Do not delete this notice"
@@ -1027,15 +1027,15 @@ msgstr "Vous pouvez seulement supprimer les utilisateurs locaux."
 
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
 msgid "Delete user"
-msgstr "Supprimer l'utilsateur"
+msgstr "Supprimer l’utilisateur"
 
 #: actions/deleteuser.php:135
 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 ""
-"Êtes-vous certain de vouloir supprimer cet utilisateur ? Ceci effacera "
-"toutes les données à son propos de la base de données, sans sauvegarde."
+"Voulez-vous vraiment supprimer cet utilisateur ? Ceci effacera toutes les "
+"données à son propos de la base de données, sans sauvegarde."
 
 #: actions/deleteuser.php:148 lib/deleteuserform.php:77
 msgid "Delete this user"
@@ -1057,7 +1057,7 @@ msgstr "URL du logo invalide."
 #: actions/designadminpanel.php:279
 #, php-format
 msgid "Theme not available: %s"
-msgstr "Le thème n'est pas disponible : %s"
+msgstr "Le thème nest pas disponible : %s"
 
 #: actions/designadminpanel.php:375
 msgid "Change logo"
@@ -1094,7 +1094,7 @@ msgid ""
 "You can upload a background image for the site. The maximum file size is %1"
 "$s."
 msgstr ""
-"Vous pouvez importer une image d'arrière plan pour ce site. La taille "
+"Vous pouvez importer une image darrière plan pour ce site. La taille "
 "maximale du fichier est de %1$s."
 
 #: actions/designadminpanel.php:457 lib/designsettings.php:139
@@ -1164,7 +1164,7 @@ msgstr "Document « %s » non trouvé."
 
 #: actions/editapplication.php:54
 msgid "Edit Application"
-msgstr "Modifier l'application"
+msgstr "Modifier lapplication"
 
 #: actions/editapplication.php:66
 msgid "You must be logged in to edit an application."
@@ -1173,7 +1173,7 @@ msgstr "Vous devez être connecté pour modifier une application."
 #: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
 #: actions/showapplication.php:87
 msgid "No such application."
-msgstr "Pas d'application."
+msgstr "Application non trouvée."
 
 #: actions/editapplication.php:161
 msgid "Use this form to edit your application."
@@ -1188,45 +1188,44 @@ msgid "Name is too long (max 255 chars)."
 msgstr "Le nom est trop long (maximum de 255 caractères)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "Pseudo déjà utilisé. Essayez-en un autre."
+msgstr "Ce nom est déjà utilisé. Essayez-en un autre."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
-msgstr "Description requise."
+msgstr "La description est requise."
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
-msgstr "L'URL source est trop longue."
+msgstr "LURL source est trop longue."
 
 #: actions/editapplication.php:200 actions/newapplication.php:185
 msgid "Source URL is not valid."
-msgstr "URL source invalide."
+msgstr "L’URL source est invalide."
 
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
-msgstr "Organisation requise."
+msgstr "L’organisation est requise."
 
 #: actions/editapplication.php:206 actions/newapplication.php:191
 msgid "Organization is too long (max 255 chars)."
-msgstr "Organisation trop longue (maximum de 255 caractères)."
+msgstr "L’organisation est trop longue (maximum de 255 caractères)."
 
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
-msgstr "La page d'accueil de l'organisation est requise."
+msgstr "La page d’accueil de l’organisation est requise."
 
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
-msgstr "Le Callback est trop long."
+msgstr "Le rappel (Callback) est trop long."
 
 #: actions/editapplication.php:225 actions/newapplication.php:215
 msgid "Callback URL is not valid."
-msgstr "URL de rappel invalide."
+msgstr "L’URL de rappel (Callback) est invalide."
 
 #: actions/editapplication.php:258
 msgid "Could not update application."
-msgstr "Impossible de mettre à jour l'application."
+msgstr "Impossible de mettre à jour lapplication."
 
 #: actions/editgroup.php:56
 #, php-format
@@ -1452,7 +1451,7 @@ msgstr "Cet avis a déjà été ajouté à vos favoris !"
 msgid "Disfavor favorite"
 msgstr "Retirer ce favori"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Avis populaires"
@@ -1549,7 +1548,7 @@ msgstr "Cet utilisateur vous a empêché de vous inscrire."
 
 #: actions/finishremotesubscribe.php:110
 msgid "You are not authorized."
-msgstr "Vous n'êtes pas autorisé."
+msgstr "Vous nêtes pas autorisé."
 
 #: actions/finishremotesubscribe.php:113
 msgid "Could not convert request token to access token."
@@ -1600,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"
 
@@ -1703,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"
 
@@ -2073,7 +2072,7 @@ msgstr "Vous devez ouvrir une session pour quitter un groupe."
 
 #: actions/leavegroup.php:90 lib/command.php:265
 msgid "You are not a member of that group."
-msgstr "Vous n'êtes pas membre de ce groupe."
+msgstr "Vous nêtes pas membre de ce groupe."
 
 #: actions/leavegroup.php:127
 #, php-format
@@ -2135,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."
@@ -2175,11 +2174,11 @@ msgstr "Utilisez ce formulaire pour inscrire une nouvelle application."
 
 #: actions/newapplication.php:176
 msgid "Source URL is required."
-msgstr "URL source requise."
+msgstr "L’URL source est requise."
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
 msgid "Could not create application."
-msgstr "Impossible de créer l'application."
+msgstr "Impossible de créer lapplication."
 
 #: actions/newgroup.php:53
 msgid "New group"
@@ -2310,7 +2309,7 @@ msgstr "Applications que vous avez enregistré"
 #: actions/oauthappssettings.php:135
 #, php-format
 msgid "You have not registered any applications yet."
-msgstr "Vous n'avez encore enregistré aucune application."
+msgstr "Vous navez encore enregistré aucune application."
 
 #: actions/oauthconnectionssettings.php:72
 msgid "Connected applications"
@@ -2323,21 +2322,21 @@ msgstr ""
 
 #: actions/oauthconnectionssettings.php:175
 msgid "You are not a user of that application."
-msgstr "Vous n'êtes pas un utilisateur de cette application."
+msgstr "Vous nêtes pas un utilisateur de cette application."
 
 #: actions/oauthconnectionssettings.php:186
 msgid "Unable to revoke access for app: "
-msgstr "Impossible d'annuler l'accès de l'application : "
+msgstr "Impossible d’annuler l’accès de l’application : "
 
 #: actions/oauthconnectionssettings.php:198
 #, php-format
 msgid "You have not authorized any applications to use your account."
-msgstr "Vous n'avez autorisé aucune application à utiliser votre compte."
+msgstr "Vous navez autorisé aucune application à utiliser votre compte."
 
 #: actions/oauthconnectionssettings.php:211
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
-"Les programmeurs peuvent modifier les paramètres d'enregistrement pour leurs "
+"Les programmeurs peuvent modifier les paramètres denregistrement pour leurs "
 "applications "
 
 #: actions/oembed.php:79 actions/shownotice.php:100
@@ -2357,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é."
 
@@ -2404,23 +2403,23 @@ msgstr "Le service de réduction d’URL est trop long (50 caractères maximum).
 
 #: actions/otp.php:69
 msgid "No user ID specified."
-msgstr "Aucun identifiant d'utilisateur n’a été spécifié."
+msgstr "Aucun identifiant dutilisateur n’a été spécifié."
 
 #: actions/otp.php:83
 msgid "No login token specified."
-msgstr "Aucun jeton d'identification n’a été spécifié."
+msgstr "Aucun jeton didentification n’a été spécifié."
 
 #: actions/otp.php:90
 msgid "No login token requested."
-msgstr "Aucune jeton d'identification requis."
+msgstr "Aucun jeton d’identification n’a été demandé."
 
 #: actions/otp.php:95
 msgid "Invalid login token specified."
-msgstr "Jeton d'identification invalide."
+msgstr "Jeton didentification invalide."
 
 #: actions/otp.php:104
 msgid "Login token expired."
-msgstr "Jeton d'identification périmé."
+msgstr "Jeton didentification périmé."
 
 #: actions/outbox.php:58
 #, php-format
@@ -2565,7 +2564,7 @@ msgstr "Jolies URL"
 
 #: actions/pathsadminpanel.php:252
 msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Utiliser des jolies URL (plus lisibles et mémorable) ?"
+msgstr "Utiliser des jolies URL (plus lisibles et faciles à mémoriser) ?"
 
 #: actions/pathsadminpanel.php:259
 msgid "Theme"
@@ -2735,7 +2734,7 @@ msgstr "Bio"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Emplacement"
@@ -2925,7 +2924,7 @@ msgstr ""
 "Pourquoi ne pas [créer un compte](%%action.register%%) et être le premier à "
 "en poster un !"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Nuage de marques"
 
@@ -3373,78 +3372,82 @@ msgstr "Sauvegarder les paramètres du site"
 msgid "You must be logged in to view an application."
 msgstr "Vous devez être connecté pour voir une application."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
-msgstr "Profil de l'application"
+msgstr "Profil de lapplication"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Icône"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Nom"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Organisation"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Description"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistiques"
 
-#: actions/showapplication.php:204
-#, fuzzy, php-format
+#: actions/showapplication.php:203
+#, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "créé par %1$s - accès %2$s par défaut - %3$d utilisateurs"
+msgstr "Créé par %1$s - accès %2$s par défaut - %3$d utilisateurs"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
-msgstr "Actions de l'application"
+msgstr "Actions de lapplication"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Réinitialiser la clé et le secret"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
-msgstr "Informations sur l'application"
+msgstr "Informations sur lapplication"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
-msgstr "Clé de l'utilisateur"
+msgstr "Clé de lutilisateur"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
-msgstr "Secret de l'utilisateur"
+msgstr "Secret de lutilisateur"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "URL du jeton de requête"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
-msgstr "URL du jeton d'accès"
+msgstr "URL du jeton daccès"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr "Autoriser l'URL"
+msgstr "Autoriser lURL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
-"Note : Nous utilisons les signatures HMAC-SHA1. Nous n'utilisons pas la "
+"Note : Nous utilisons les signatures HMAC-SHA1. Nous nutilisons pas la "
 "méthode de signature en texte clair."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Voulez-vous vraiment réinitialiser votre clé consommateur et secrète ?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3517,12 +3520,12 @@ msgid "Group profile"
 msgstr "Profil du groupe"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Note"
 
@@ -3973,7 +3976,7 @@ msgstr "Aucun code entré"
 
 #: actions/subedit.php:70
 msgid "You are not subscribed to that profile."
-msgstr "Vous n'êtes pas abonné(e) à ce profil."
+msgstr "Vous nêtes pas abonné(e) à ce profil."
 
 #: actions/subedit.php:83
 msgid "Could not save subscription."
@@ -4109,7 +4112,8 @@ msgstr "Marque %s"
 msgid "User profile"
 msgstr "Profil de l’utilisateur"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Photo"
 
@@ -4169,7 +4173,7 @@ msgstr "Aucune identité de profil dans la requête."
 msgid "Unsubscribed"
 msgstr "Désabonné"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4260,36 +4264,36 @@ msgstr ""
 "abonner aux avis de cet utilisateur. Si vous n’avez pas demandé à vous "
 "abonner aux avis de quelqu’un, cliquez « Rejeter »."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licence"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Accepter"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "S’abonner à cet utilisateur"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Refuser"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Rejeter cet abonnement"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Pas de requête d’autorisation !"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Abonnement autorisé"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4299,11 +4303,11 @@ msgstr ""
 "Vérifiez les instructions du site pour savoir comment compléter "
 "l’autorisation de l’abonnement. Votre jeton d’abonnement est :"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Abonnement refusé"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4313,38 +4317,38 @@ msgstr ""
 "Vérifiez les instructions du site pour savoir comment refuser pleinement "
 "l’abonnement."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "L’URI de l’auditeur ‘%s’ n’a pas été trouvée ici."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est trop longue."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 "L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est un utilisateur local."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "L’URL du profil ‘%s’ est pour un utilisateur local."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "L’URL de l’avatar ‘%s’ n’est pas valide."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Impossible de lire l’URL de l’avatar « %s »."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Format d’image invalide pour l’URL de l’avatar « %s »."
@@ -4470,11 +4474,11 @@ msgstr "Un fichier aussi gros dépasserai votre quota mensuel de %d octets."
 
 #: classes/Group_member.php:41
 msgid "Group join failed."
-msgstr "L'inscription au groupe a échoué."
+msgstr "Linscription au groupe a échoué."
 
 #: classes/Group_member.php:53
 msgid "Not part of group."
-msgstr "N'appartient pas au groupe."
+msgstr "Nappartient pas au groupe."
 
 #: classes/Group_member.php:60
 msgid "Group leave failed."
@@ -4483,7 +4487,7 @@ msgstr "La désinscription du groupe a échoué."
 #: classes/Login_token.php:76
 #, php-format
 msgid "Could not create login token for %s"
-msgstr "Impossible de créer le jeton d'ouverture de session pour %s"
+msgstr "Impossible de créer le jeton d’identification pour %s"
 
 #: classes/Message.php:45
 msgid "You are banned from sending direct messages."
@@ -4542,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"
@@ -4558,7 +4562,7 @@ msgstr "Impossible de créer le groupe."
 
 #: classes/User_group.php:409
 msgid "Could not set group membership."
-msgstr "Impossible d'établir l’inscription au groupe."
+msgstr "Impossible détablir l’inscription au groupe."
 
 #: lib/accountsettingsaction.php:108
 msgid "Change your profile settings"
@@ -4586,7 +4590,7 @@ msgstr "Autres "
 
 #: lib/accountsettingsaction.php:128
 msgid "Other options"
-msgstr "Autres options "
+msgstr "Autres options"
 
 #: lib/action.php:144
 #, php-format
@@ -4752,13 +4756,13 @@ msgstr "Le contenu et les données de %1$s sont privés et confidentiels."
 #, php-format
 msgid "Content and data copyright by %1$s. All rights reserved."
 msgstr ""
-"Le contenu et les données sont sous le droit d'auteur de %1$s. Tous droits "
+"Le contenu et les données sont sous le droit dauteur de %1$s. Tous droits "
 "réservés."
 
 #: lib/action.php:814
 msgid "Content and data copyright by contributors. All rights reserved."
 msgstr ""
-"Le contenu et les données sont sous le droit d'auteur du contributeur. Tous "
+"Le contenu et les données sont sous le droit dauteur du contributeur. Tous "
 "droits réservés."
 
 #: lib/action.php:826
@@ -4815,7 +4819,7 @@ msgstr "Configuration utilisateur"
 
 #: lib/adminpanelaction.php:327
 msgid "Access configuration"
-msgstr "Configuration d'accès"
+msgstr "Configuration daccès"
 
 #: lib/adminpanelaction.php:332
 msgid "Paths configuration"
@@ -4825,18 +4829,18 @@ msgstr "Configuration des chemins"
 msgid "Sessions configuration"
 msgstr "Configuration des sessions"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
-"La ressource de l'API a besoin de l'accès en lecture et en écriture, mais "
-"vous n'y avez accès qu'en lecture."
+"La ressource de l’API a besoin de l’accès en lecture et en écriture, mais "
+"vous n’y avez accès qu’en lecture."
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
-"L'essai d'authentification de l'API a échoué ; identifiant = %1$s, proxy = %2"
-"$s, ip = %3$s"
+"L’essai d’authentification de l’API a échoué ; pseudo = %1$s, proxy = %2$s, "
+"ip = %3$s"
 
 #: lib/applicationeditform.php:136
 msgid "Edit application"
@@ -4853,7 +4857,7 @@ msgstr "Décrivez votre application en %d caractères"
 
 #: lib/applicationeditform.php:207
 msgid "Describe your application"
-msgstr "Décrivez votre applications"
+msgstr "Décrivez votre application"
 
 #: lib/applicationeditform.php:216
 msgid "Source URL"
@@ -4861,7 +4865,7 @@ msgstr "URL source"
 
 #: lib/applicationeditform.php:218
 msgid "URL of the homepage of this application"
-msgstr "URL de la page d'accueil de cette application"
+msgstr "URL de la page daccueil de cette application"
 
 #: lib/applicationeditform.php:224
 msgid "Organization responsible for this application"
@@ -4869,11 +4873,11 @@ msgstr "Organisation responsable de cette application"
 
 #: lib/applicationeditform.php:230
 msgid "URL for the homepage of the organization"
-msgstr "URL de la page d'accueil de l'organisation"
+msgstr "URL de la page d’accueil de l’organisation"
 
 #: lib/applicationeditform.php:236
 msgid "URL to redirect to after authentication"
-msgstr "URL vers laquelle rediriger après l'authentification"
+msgstr "URL vers laquelle rediriger après lauthentification"
 
 #: lib/applicationeditform.php:258
 msgid "Browser"
@@ -4885,7 +4889,7 @@ msgstr "Bureau"
 
 #: lib/applicationeditform.php:275
 msgid "Type of application, browser or desktop"
-msgstr "Type d'application, navigateur ou bureau"
+msgstr "Type dapplication, navigateur ou bureau"
 
 #: lib/applicationeditform.php:297
 msgid "Read-only"
@@ -4961,7 +4965,7 @@ msgstr "Ça n’a pas de sens de se faire un clin d’œil à soi-même !"
 #: lib/command.php:99
 #, php-format
 msgid "Nudge sent to %s"
-msgstr "Coup de code envoyé à %s"
+msgstr "Clin d’œil envoyé à %s"
 
 #: lib/command.php:126
 #, php-format
@@ -4999,7 +5003,7 @@ msgstr "Impossible d’inscrire l’utilisateur %s au groupe %s"
 #: lib/command.php:236
 #, php-format
 msgid "%s joined group %s"
-msgstr "%1$s a rejoint le groupe %2$s"
+msgstr "%s a rejoint le groupe %s"
 
 #: lib/command.php:275
 #, php-format
@@ -5009,7 +5013,7 @@ msgstr "Impossible de retirer l’utilisateur %s du groupe %s"
 #: lib/command.php:280
 #, php-format
 msgid "%s left group %s"
-msgstr "%1$s a quitté le groupe %2$s"
+msgstr "%s a quitté le groupe %s"
 
 #: lib/command.php:309
 #, php-format
@@ -5120,7 +5124,7 @@ msgstr "Impossible d’activer les avertissements."
 
 #: lib/command.php:641
 msgid "Login command is disabled"
-msgstr "La commande d'ouverture de session est désactivée"
+msgstr "La commande douverture de session est désactivée"
 
 #: lib/command.php:652
 #, php-format
@@ -5131,7 +5135,7 @@ msgstr ""
 
 #: lib/command.php:668
 msgid "You are not subscribed to anyone."
-msgstr "Vous n'êtes pas abonné(e) à personne."
+msgstr "Vous n’êtes abonné(e) à personne."
 
 #: lib/command.php:670
 msgid "You are subscribed to this person:"
@@ -5415,7 +5419,7 @@ msgstr "Groupes avec le plus de membres"
 
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
-msgstr "Groupes avec le plus d'éléments publiés"
+msgstr "Groupes avec le plus déléments publiés"
 
 #: lib/grouptagcloudsection.php:56
 #, php-format
@@ -5803,7 +5807,7 @@ msgstr "Un dossier temporaire est manquant."
 
 #: lib/mediafile.php:162
 msgid "Failed to write file to disk."
-msgstr "Impossible d'écrire sur le disque."
+msgstr "Impossible décrire sur le disque."
 
 #: lib/mediafile.php:165
 msgid "File upload stopped by extension."
@@ -5873,7 +5877,7 @@ msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
-"Désolé, l'obtention de votre localisation prend plus de temps que prévu. "
+"Désolé, lobtention de votre localisation prend plus de temps que prévu. "
 "Veuillez réessayer plus tard."
 
 #: lib/noticelist.php:428
@@ -5949,11 +5953,11 @@ msgstr "Erreur lors de l’insertion du profil distant"
 msgid "Duplicate notice"
 msgstr "Dupliquer l’avis"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Il vous avez été interdit de vous abonner."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Impossible d’insérer un nouvel abonnement."
 
@@ -6060,7 +6064,7 @@ msgstr "Reprendre cet avis"
 
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Aucun utilisateur unique défini pour le mode mono-utilisateur."
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6227,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"
 
index 1a129f69ae1946afb8535044dddd77d3e5450b15..0358b8ecd0824a3b98e5cbd96e88c1b741b296b5 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:42+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 (r61864); 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"
@@ -181,22 +181,23 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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"
@@ -575,7 +576,8 @@ msgstr "Sobre"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Alcume"
@@ -770,7 +772,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 #, fuzzy
 msgid "Delete"
@@ -841,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"
@@ -1498,7 +1500,7 @@ msgstr "Este chío xa é un favorito!"
 msgid "Disfavor favorite"
 msgstr "Desactivar favorito"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Chíos populares"
@@ -1652,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"
@@ -1758,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 ""
 
@@ -2174,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."
@@ -2394,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."
 
@@ -2792,7 +2794,7 @@ msgstr "Bio"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Localización"
@@ -2981,7 +2983,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3430,80 +3432,85 @@ msgstr "Configuracións de Twitter"
 msgid "You must be logged in to view an application."
 msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "O chío non ten perfil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Alcume"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Invitación(s) enviada(s)."
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 #, fuzzy
 msgid "Description"
 msgstr "Subscricións"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Estatísticas"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Estas seguro que queres eliminar este chío?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3569,12 +3576,12 @@ msgid "Group profile"
 msgstr "Non existe o perfil."
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 #, fuzzy
 msgid "Note"
 msgstr "Chíos"
@@ -4155,7 +4162,8 @@ msgstr "Tags"
 msgid "User profile"
 msgstr "O usuario non ten perfil."
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4220,7 +4228,7 @@ msgstr "Non hai identificador de perfil na peticion."
 msgid "Unsubscribed"
 msgstr "De-suscribido"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4315,38 +4323,38 @@ msgstr ""
 "user's notices. If you didn't just ask to subscribe to someone's notices, "
 "click \"Cancel\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Aceptar"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "Suscrito a %s"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Rexeitar"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Subscrición de autorización."
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Sen petición de autorización!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Subscrición autorizada"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4357,11 +4365,11 @@ msgstr ""
 "proporcionada. Comproba coas instruccións do sitio para máis detalles en "
 "como autorizar subscricións. O teu token de subscrición é:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Subscrición rexeitada"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4372,37 +4380,37 @@ msgstr ""
 "with the site's instructions for details on how to fully reject the "
 "subscription."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Non se pode ler a URL do avatar de '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Tipo de imaxe incorrecto para '%s'"
@@ -4591,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)"
@@ -4899,11 +4907,11 @@ msgstr "Confirmación de SMS"
 msgid "Sessions configuration"
 msgstr "Confirmación de SMS"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -6023,12 +6031,12 @@ msgstr "Aconteceu un erro ó inserir o perfil remoto"
 msgid "Duplicate notice"
 msgstr "Eliminar chío"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "Este usuario non che permite suscribirte a el."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Non se puido inserir a nova subscrición."
 
@@ -6328,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"
 
index 0b46e0588bd97812eb1ce2886f056900f0edd15c..fb8f120319b7e16ce8df55e84b558e1e7e9f6e1c 100644 (file)
@@ -7,12 +7,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:45+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 (r61864); 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"
@@ -178,22 +178,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 "קוד האישור לא נמצא."
@@ -568,7 +569,8 @@ msgstr "אודות"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "כינוי"
@@ -762,7 +764,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 #, fuzzy
 msgid "Delete"
@@ -831,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 "אין משתמש כזה."
@@ -1469,7 +1471,7 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 #, fuzzy
 msgid "Popular notices"
@@ -1624,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 "אין משתמש כזה."
@@ -1729,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 ""
 
@@ -2111,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 "למשתמש אין פרופיל."
@@ -2325,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 ""
 
@@ -2719,7 +2721,7 @@ msgstr "ביוגרפיה"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "מיקום"
@@ -2897,7 +2899,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3315,80 +3317,84 @@ msgstr "הגדרות"
 msgid "You must be logged in to view an application."
 msgstr ""
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "להודעה אין פרופיל"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "כינוי"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "מיקום"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 #, fuzzy
 msgid "Description"
 msgstr "הרשמות"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "סטטיסטיקה"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3454,12 +3460,12 @@ msgid "Group profile"
 msgstr "אין הודעה כזו."
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 #, fuzzy
 msgid "Note"
 msgstr "הודעות"
@@ -4015,7 +4021,8 @@ msgstr ""
 msgid "User profile"
 msgstr "למשתמש אין פרופיל."
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4077,7 +4084,7 @@ msgstr "השרת לא החזיר כתובת פרופיל"
 msgid "Unsubscribed"
 msgstr "בטל מנוי"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4168,38 +4175,38 @@ msgstr ""
 "בדוק את הפרטים כדי לוודא שברצונך להירשם כמנוי להודעות משתמש זה. אם אינך רוצה "
 "להירשם, לחץ \"בטל\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "קבל"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "ההרשמה אושרה"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "דחה"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "כל המנויים"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "לא התבקש אישור!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "ההרשמה אושרה"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4209,11 +4216,11 @@ msgstr ""
 "המנוי אושר, אבל לא התקבלה כתובת אליה ניתן לחזור. בדוק את הוראות האתר וחפש "
 "כיצד לאשר מנוי. אסימון המנוי שלך הוא:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "ההרשמה נדחתה"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4223,37 +4230,37 @@ msgstr ""
 "המנוי נדחה, אבל לא התקבלה כתובת לחזרה. בדוק את הוראות האתר וחפש כיצד להשלים "
 "דחיית מנוי."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "לא ניתן לקרוא את ה-URL '%s' של התמונה"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "סוג התמונה של '%s' אינו מתאים"
@@ -4437,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 ""
@@ -4735,11 +4742,11 @@ msgstr "הרשמות"
 msgid "Sessions configuration"
 msgstr "הרשמות"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5755,11 +5762,11 @@ msgstr "שגיאה בהכנסת פרופיל מרוחק"
 msgid "Duplicate notice"
 msgstr "הודעה חדשה"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "הכנסת מנוי חדש נכשלה."
 
@@ -6053,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 "לפני כשנה"
 
index dfc9bcb248a7ed378b85f723c4cbe69b9b5a5719..daecf17e80bffcf20e378da3ba264295896eacb2 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:20:49+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 (r61864); 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"
@@ -176,22 +176,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -551,7 +552,8 @@ msgstr "Konto"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Přimjeno"
@@ -739,7 +741,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Přehlad"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Zničić"
@@ -803,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ć"
 
@@ -1409,7 +1411,7 @@ msgstr "Tuta zdźělenka je hižo faworit!"
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Woblubowane zdźělenki"
@@ -1551,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ć"
 
@@ -1648,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ć"
 
@@ -2010,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ć."
@@ -2217,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."
 
@@ -2587,7 +2589,7 @@ msgstr "Biografija"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Městno"
@@ -2759,7 +2761,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3163,76 +3165,81 @@ msgstr "Sydłowe nastajenja składować"
 msgid "You must be logged in to view an application."
 msgstr "Dyrbiš přizjewjeny być, zo by sej aplikaciju wobhladał."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Aplikaciski profil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Mjeno"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Organizacija"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Wopisanje"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistika"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "URL awtorizować"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Chceš woprawdźe tutu zdźělenku wušmórnyć?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3297,12 +3304,12 @@ msgid "Group profile"
 msgstr "Skupinski profil"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr ""
 
@@ -3841,7 +3848,8 @@ msgstr ""
 msgid "User profile"
 msgstr "Wužiwarski profil"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Foto"
 
@@ -3896,7 +3904,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr "Wotskazany"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -3980,84 +3988,84 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licenca"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Akceptować"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Tutoho wužiwarja abonować"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Wotpokazać"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Tutón abonement wotpokazać"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Abonement awtorizowany"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Abonement wotpokazany"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr ""
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4233,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 ""
@@ -4510,11 +4518,11 @@ msgstr ""
 msgid "Sessions configuration"
 msgstr "SMS-wobkrućenje"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5487,11 +5495,11 @@ msgstr "Zmylk při zasunjenju zdaleneho profila"
 msgid "Duplicate notice"
 msgstr "Dwójna zdźělenka"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr ""
 
@@ -5765,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"
 
index 5bc1570600101f068ce5133f863e7f4a31c23c50..698f779dd0be3876f3dfa072e5fb638ee002134e 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:00+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 (r61864); 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"
@@ -24,14 +24,12 @@ msgid "Access"
 msgstr "Accesso"
 
 #: actions/accessadminpanel.php:65
-#, fuzzy
 msgid "Site access settings"
-msgstr "Salveguardar configurationes del sito"
+msgstr "Configurationes de accesso al sito"
 
 #: actions/accessadminpanel.php:158
-#, fuzzy
 msgid "Registration"
-msgstr "Crear un conto"
+msgstr "Registration"
 
 #: actions/accessadminpanel.php:161
 msgid "Private"
@@ -39,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"
@@ -70,9 +68,8 @@ msgid "Save"
 msgstr "Salveguardar"
 
 #: actions/accessadminpanel.php:189
-#, fuzzy
 msgid "Save access settings"
-msgstr "Salveguardar configurationes del sito"
+msgstr "Salveguardar configurationes de accesso"
 
 #: actions/all.php:63 actions/public.php:97 actions/replies.php:92
 #: actions/showfavorites.php:137 actions/tag.php:51
@@ -106,9 +103,9 @@ msgid "No such user."
 msgstr "Usator non existe."
 
 #: actions/all.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s and friends, page %2$d"
-msgstr "%s profilos blocate, pagina %d"
+msgstr "%1$s e amicos, pagina %2$d"
 
 #: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
 #: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
@@ -150,13 +147,13 @@ msgstr ""
 "action.groups%%) o publica alique tu mesme."
 
 #: actions/all.php:134
-#, fuzzy, php-format
+#, php-format
 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 ""
-"Tu pote tentar [dar un pulsata a %s](../%s) in su profilo o [publicar un "
-"message a su attention](%%%%action.newnotice%%%%?status_textarea=%s)."
+"Tu pote tentar [dar un pulsata a %1$s](../%2$s) in su profilo o [publicar un "
+"message a su attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 
 #: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
 #, php-format
@@ -182,22 +179,23 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -324,18 +322,16 @@ msgid "No status found with that ID."
 msgstr "Nulle stato trovate con iste ID."
 
 #: actions/apifavoritecreate.php:119
-#, fuzzy
 msgid "This status is already a favorite."
-msgstr "Iste stato es ja favorite!"
+msgstr "Iste stato es ja favorite."
 
 #: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
 msgid "Could not create favorite."
 msgstr "Non poteva crear le favorite."
 
 #: actions/apifavoritedestroy.php:122
-#, fuzzy
 msgid "That status is not a favorite."
-msgstr "Iste stato non es favorite!"
+msgstr "Iste stato non es favorite."
 
 #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
 msgid "Could not delete favorite."
@@ -355,9 +351,8 @@ msgid "Could not unfollow user: User not found."
 msgstr "Non poteva cessar de sequer le usator: Usator non trovate."
 
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "Tu non pote cessar de sequer te mesme!"
+msgstr "Tu non pote cessar de sequer te mesme."
 
 #: actions/apifriendshipsexists.php:94
 msgid "Two user ids or screen_names must be supplied."
@@ -452,18 +447,18 @@ msgid "You have been blocked from that group by the admin."
 msgstr "Le administrator te ha blocate de iste gruppo."
 
 #: 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 "Non poteva inscriber le usator %s in le gruppo %s."
+msgstr "Non poteva inscriber le usator %1$s in le gruppo %2$s."
 
 #: actions/apigroupleave.php:114
 msgid "You are not a member of this group."
 msgstr "Tu non es membro de iste gruppo."
 
 #: 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 "Non poteva remover le usator %s del gruppo %s."
+msgstr "Non poteva remover le usator %1$s del gruppo %2$s."
 
 #: actions/apigrouplist.php:95
 #, php-format
@@ -482,12 +477,11 @@ msgstr "gruppos in %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Nulle parametro oauth_token fornite."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Dimension invalide."
+msgstr "Indicio invalide."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -508,19 +502,19 @@ msgid "There was a problem with your session token. Try again, please."
 msgstr "Occurreva un problema con le indicio de tu session. Per favor reproba."
 
 #: actions/apioauthauthorize.php:135
-#, fuzzy
 msgid "Invalid nickname / password!"
-msgstr "Nomine de usator o contrasigno invalide."
+msgstr "Nomine de usator o contrasigno invalide!"
 
 #: actions/apioauthauthorize.php:159
-#, fuzzy
 msgid "Database error deleting OAuth application user."
-msgstr "Error durante le configuration del usator."
+msgstr ""
+"Error del base de datos durante le deletion del usator del application OAuth."
 
 #: actions/apioauthauthorize.php:185
-#, fuzzy
 msgid "Database error inserting OAuth application user."
-msgstr "Error durante le configuration del usator."
+msgstr ""
+"Error del base de datos durante le insertion del usator del application "
+"OAuth."
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -528,11 +522,13 @@ msgid ""
 "The request token %s has been authorized. Please exchange it for an access "
 "token."
 msgstr ""
+"Le indicio de requesta %s ha essite autorisate. Per favor excambia lo pro un "
+"indicio de accesso."
 
 #: actions/apioauthauthorize.php:227
 #, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr ""
+msgstr "Le indicio de requesta %s ha essite refusate e revocate."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -545,11 +541,11 @@ msgstr "Submission de formulario inexpectate."
 
 #: actions/apioauthauthorize.php:259
 msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Un application vole connecter se a tu conto"
 
 #: actions/apioauthauthorize.php:276
 msgid "Allow or deny access"
-msgstr ""
+msgstr "Permitter o refusar accesso"
 
 #: actions/apioauthauthorize.php:292
 #, php-format
@@ -558,14 +554,18 @@ 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 ""
+"Le application <strong>%1$s</strong> per <strong>%2$s</strong> vole poter "
+"<strong>%3$s</strong> le datos de tu conto de %4$s. Tu debe solmente dar "
+"accesso a tu conto de %4$s a tertie personas in le quales tu ha confidentia."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
-msgstr ""
+msgstr "Conto"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Pseudonymo"
@@ -576,17 +576,16 @@ msgid "Password"
 msgstr "Contrasigno"
 
 #: actions/apioauthauthorize.php:328
-#, fuzzy
 msgid "Deny"
-msgstr "Apparentia"
+msgstr "Refusar"
 
 #: actions/apioauthauthorize.php:334
 msgid "Allow"
-msgstr ""
+msgstr "Permitter"
 
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Permitter o refusar accesso al informationes de tu conto."
 
 #: actions/apistatusesdestroy.php:107
 msgid "This method requires a POST or DELETE."
@@ -640,14 +639,14 @@ msgid "Unsupported format."
 msgstr "Formato non supportate."
 
 #: actions/apitimelinefavorites.php:108
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favorites de %s"
+msgstr "%1$s / Favorites de %2$s"
 
 #: actions/apitimelinefavorites.php:120
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s actualisationes favoritisate per %s / %s."
+msgstr "%1$s actualisationes favoritisate per %2$s / %2$s."
 
 #: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
 #: actions/grouprss.php:131 actions/userrss.php:90
@@ -708,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
@@ -734,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
@@ -757,14 +757,14 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Previsualisation"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 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"
@@ -824,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"
 
@@ -848,9 +848,9 @@ msgid "%s blocked profiles"
 msgstr "%s profilos blocate"
 
 #: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s profilos blocate, pagina %d"
+msgstr "%1$s profilos blocate, pagina %2$d"
 
 #: actions/blockedfromgroup.php:108
 msgid "A list of the users blocked from joining this group."
@@ -907,7 +907,6 @@ msgid "Couldn't delete email confirmation."
 msgstr "Non poteva deler confirmation de e-mail."
 
 #: actions/confirmaddress.php:144
-#, fuzzy
 msgid "Confirm address"
 msgstr "Confirmar adresse"
 
@@ -926,51 +925,45 @@ msgid "Notices"
 msgstr "Notas"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Tu debe aperir un session pro modificar un gruppo."
+msgstr "Tu debe aperir un session pro deler un application."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Le nota ha nulle profilo"
+msgstr "Application non trovate."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
-#, fuzzy
 msgid "You are not the owner of this application."
-msgstr "Tu non es membro de iste gruppo."
+msgstr "Tu non es le proprietario de iste application."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
 #: lib/action.php:1195
 msgid "There was a problem with your session token."
-msgstr ""
+msgstr "Il habeva un problema con tu indicio de session."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Nota non trovate."
+msgstr "Deler application"
 
 #: 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 ""
-"Es tu secur de voler deler iste usator? Isto radera tote le datos super le "
-"usator del base de datos, sin copia de reserva."
+"Es tu secur de voler deler iste application? Isto radera tote le datos super "
+"le application del base de datos, includente tote le existente connexiones "
+"de usator."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Non deler iste nota"
+msgstr "Non deler iste application"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Deler iste nota"
+msgstr "Deler iste application"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1087,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"
@@ -1151,84 +1144,74 @@ msgid "Add to favorites"
 msgstr "Adder al favorites"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Documento non existe."
+msgstr "Le documento \"%s\" non existe."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Le nota ha nulle profilo"
+msgstr "Modificar application"
 
 #: actions/editapplication.php:66
-#, fuzzy
 msgid "You must be logged in to edit an application."
-msgstr "Tu debe aperir un session pro modificar un gruppo."
+msgstr "Tu debe aperir un session pro modificar un application."
 
 #: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
 #: actions/showapplication.php:87
-#, fuzzy
 msgid "No such application."
-msgstr "Nota non trovate."
+msgstr "Application non trovate."
 
 #: actions/editapplication.php:161
-#, fuzzy
 msgid "Use this form to edit your application."
-msgstr "Usa iste formulario pro modificar le gruppo."
+msgstr "Usa iste formulario pro modificar le application."
 
 #: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
 msgid "Name is required."
-msgstr "Identic al contrasigno hic supra. Requisite."
+msgstr "Le nomine es requirite."
 
 #: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
 msgid "Name is too long (max 255 chars)."
-msgstr "Le nomine complete es troppo longe (max. 255 characteres)."
+msgstr "Le nomine es troppo longe (max. 255 characteres)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "Pseudonymo ja in uso. Proba un altere."
+msgstr "Nomine ja in uso. Proba un altere."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
-msgstr ""
+msgstr "Le description es requirite."
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
-msgstr ""
+msgstr "Le URL de origine es troppo longe."
 
 #: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
 msgid "Source URL is not valid."
-msgstr "Le pagina personal non es un URL valide."
+msgstr "Le URL de origine non es valide."
 
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
-msgstr ""
+msgstr "Le organisation es requirite."
 
 #: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
 msgid "Organization is too long (max 255 chars)."
-msgstr "Loco es troppo longe (max. 255 characteres)."
+msgstr "Le organisation es troppo longe (max. 255 characteres)."
 
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
-msgstr ""
+msgstr "Le sito web del organisation es requirite."
 
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
-msgstr ""
+msgstr "Le reappello (callback) es troppo longe."
 
 #: actions/editapplication.php:225 actions/newapplication.php:215
 msgid "Callback URL is not valid."
-msgstr ""
+msgstr "Le URL de reappello (callback) non es valide."
 
 #: actions/editapplication.php:258
-#, fuzzy
 msgid "Could not update application."
-msgstr "Non poteva actualisar gruppo."
+msgstr "Non poteva actualisar application."
 
 #: actions/editgroup.php:56
 #, php-format
@@ -1241,7 +1224,6 @@ msgstr "Tu debe aperir un session pro crear un gruppo."
 
 #: 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 "Tu debe esser administrator pro modificar le gruppo."
 
@@ -1267,7 +1249,6 @@ msgid "Options saved."
 msgstr "Optiones salveguardate."
 
 #: actions/emailsettings.php:60
-#, fuzzy
 msgid "Email settings"
 msgstr "Configuration de e-mail"
 
@@ -1306,9 +1287,8 @@ msgid "Cancel"
 msgstr "Cancellar"
 
 #: actions/emailsettings.php:121
-#, fuzzy
 msgid "Email address"
-msgstr "Adresses de e-mail"
+msgstr "Adresse de e-mail"
 
 #: actions/emailsettings.php:123
 msgid "Email address, like \"UserName@example.org\""
@@ -1355,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."
@@ -1457,7 +1437,7 @@ msgstr "Iste nota es ja favorite!"
 msgid "Disfavor favorite"
 msgstr "Disfavorir favorite"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Notas popular"
@@ -1529,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!"
@@ -1604,20 +1584,20 @@ 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"
 
 #: actions/groupblock.php:162
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Are you sure you want to block user \"%1$s\" from the group \"%2$s\"? They "
 "will be removed from the group, unable to post, and unable to subscribe to "
 "the group in the future."
 msgstr ""
-"Es tu secur de voler blocar le usator \"%s\" del gruppo \"%s\"? Ille essera "
-"removite del gruppo, non potera publicar messages, e non potera subscriber "
-"se al gruppo in le futuro."
+"Es tu secur de voler blocar le usator \"%1$s\" del gruppo \"%2$s\"? Ille "
+"essera removite del gruppo, non potera publicar messages, e non potera "
+"subscriber se al gruppo in le futuro."
 
 #: actions/groupblock.php:178
 msgid "Do not block this user from this group"
@@ -1669,11 +1649,10 @@ 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
-#, fuzzy
 msgid "User without matching profile."
 msgstr "Usator sin profilo correspondente"
 
@@ -1695,9 +1674,9 @@ msgid "%s group members"
 msgstr "Membros del gruppo %s"
 
 #: actions/groupmembers.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "Membros del gruppo %s, pagina %d"
+msgstr "Membros del gruppo %1$s, pagina %2$d"
 
 #: actions/groupmembers.php:111
 msgid "A list of the users in this group."
@@ -1707,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"
 
@@ -1806,7 +1785,6 @@ msgid "Error removing the block."
 msgstr "Error de remover le blocada."
 
 #: actions/imsettings.php:59
-#, fuzzy
 msgid "IM settings"
 msgstr "Configuration de messageria instantanee"
 
@@ -1837,7 +1815,6 @@ msgstr ""
 "message con ulterior instructiones. (Ha tu addite %s a tu lista de amicos?)"
 
 #: actions/imsettings.php:124
-#, fuzzy
 msgid "IM address"
 msgstr "Adresse de messageria instantanee"
 
@@ -1903,9 +1880,9 @@ msgid "That is not your Jabber ID."
 msgstr "Isto non es tu ID de Jabber."
 
 #: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
 msgid "Inbox for %1$s - page %2$d"
-msgstr "Cassa de entrata de %s"
+msgstr "Cassa de entrata de %1$s - pagina %2$d"
 
 #: actions/inbox.php:62
 #, php-format
@@ -1947,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 ""
@@ -2061,9 +2038,9 @@ msgid "You must be logged in to join a group."
 msgstr "Tu debe aperir un session pro facer te membro de un gruppo."
 
 #: actions/joingroup.php:131
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s joined group %2$s"
-msgstr "%s se faceva membro del gruppo %s"
+msgstr "%1$s es ora membro del gruppo %2$s"
 
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
@@ -2074,9 +2051,9 @@ msgid "You are not a member of that group."
 msgstr "Tu non es membro de iste gruppo."
 
 #: actions/leavegroup.php:127
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s left group %2$s"
-msgstr "%s quitava le gruppo %s"
+msgstr "%1$s quitava le gruppo %2$s"
 
 #: actions/login.php:80 actions/otp.php:62 actions/register.php:137
 msgid "Already logged in."
@@ -2129,54 +2106,50 @@ 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
-#, fuzzy, php-format
+#: actions/makeadmin.php:96
+#, php-format
 msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "%s es ja administrator del gruppo \"%s\"."
+msgstr "%1$s es ja administrator del gruppo \"%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 "Non poteva obtener le datos del membrato de %s in le gruppo %s"
+msgstr "Non pote obtener le datos del membrato de %1$s in le gruppo %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 "Non pote facer %s administrator del gruppo %s"
+msgstr "Non pote facer %1$s administrator del gruppo %2$s."
 
 #: actions/microsummary.php:69
 msgid "No current status"
 msgstr "Nulle stato actual"
 
 #: actions/newapplication.php:52
-#, fuzzy
 msgid "New Application"
-msgstr "Nota non trovate."
+msgstr "Nove application"
 
 #: actions/newapplication.php:64
-#, fuzzy
 msgid "You must be logged in to register an application."
-msgstr "Tu debe aperir un session pro crear un gruppo."
+msgstr "Tu debe aperir un session pro registrar un application."
 
 #: actions/newapplication.php:143
-#, fuzzy
 msgid "Use this form to register a new application."
-msgstr "Usa iste formulario pro crear un nove gruppo."
+msgstr "Usa iste formulario pro registrar un nove application."
 
 #: actions/newapplication.php:176
 msgid "Source URL is required."
-msgstr ""
+msgstr "Le URL de origine es requirite."
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
-msgstr "Non poteva crear aliases."
+msgstr "Non poteva crear application."
 
 #: actions/newgroup.php:53
 msgid "New group"
@@ -2215,9 +2188,9 @@ msgid "Message sent"
 msgstr "Message inviate"
 
 #: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
 msgid "Direct message to %s sent."
-msgstr "Message directe a %s inviate"
+msgstr "Message directe a %s inviate."
 
 #: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
 msgid "Ajax Error"
@@ -2245,9 +2218,9 @@ msgid "Text search"
 msgstr "Recerca de texto"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Resultatos del recerca de \"%s\" in %s"
+msgstr "Resultatos del recerca de \"%1$s\" in %2$s"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2294,48 +2267,48 @@ msgid "Nudge sent!"
 msgstr "Pulsata inviate!"
 
 #: actions/oauthappssettings.php:59
-#, fuzzy
 msgid "You must be logged in to list your applications."
-msgstr "Tu debe aperir un session pro modificar un gruppo."
+msgstr "Tu debe aperir un session pro listar tu applicationes."
 
 #: actions/oauthappssettings.php:74
 msgid "OAuth applications"
-msgstr ""
+msgstr "Applicationes OAuth"
 
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
-msgstr ""
+msgstr "Applicationes que tu ha registrate"
 
 #: actions/oauthappssettings.php:135
 #, php-format
 msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Tu non ha ancora registrate alcun application."
 
 #: actions/oauthconnectionssettings.php:72
 msgid "Connected applications"
-msgstr ""
+msgstr "Applicationes connectite"
 
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Tu ha permittite al sequente applicationes de acceder a tu conto."
 
 #: actions/oauthconnectionssettings.php:175
-#, fuzzy
 msgid "You are not a user of that application."
-msgstr "Tu non es membro de iste gruppo."
+msgstr "Tu non es usator de iste application."
 
 #: actions/oauthconnectionssettings.php:186
 msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Impossibile revocar le accesso del application: "
 
 #: actions/oauthconnectionssettings.php:198
 #, php-format
 msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "Tu non ha autorisate alcun application a usar tu conto."
 
 #: actions/oauthconnectionssettings.php:211
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
+"Le programmatores pote modificar le parametros de registration pro lor "
+"applicationes "
 
 #: actions/oembed.php:79 actions/shownotice.php:100
 msgid "Notice has no profile"
@@ -2354,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."
 
@@ -2368,7 +2341,6 @@ msgid "Notice Search"
 msgstr "Rercerca de notas"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
 msgstr "Altere configurationes"
 
@@ -2401,33 +2373,29 @@ msgid "URL shortening service is too long (max 50 chars)."
 msgstr "Le servicio de accurtamento de URL es troppo longe (max 50 chars)."
 
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "Nulle gruppo specificate."
+msgstr "Nulle identificator de usator specificate."
 
 #: actions/otp.php:83
-#, fuzzy
 msgid "No login token specified."
-msgstr "Nulle nota specificate."
+msgstr "Nulle indicio de identification specificate."
 
 #: actions/otp.php:90
 msgid "No login token requested."
-msgstr ""
+msgstr "Nulle indicio de identification requestate."
 
 #: actions/otp.php:95
-#, fuzzy
 msgid "Invalid login token specified."
-msgstr "Indicio invalide o expirate."
+msgstr "Indicio de identification invalide specificate."
 
 #: actions/otp.php:104
-#, fuzzy
 msgid "Login token expired."
-msgstr "Identificar te a iste sito"
+msgstr "Le indicio de identification ha expirate."
 
 #: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
 msgid "Outbox for %1$s - page %2$d"
-msgstr "Cassa de exito pro %s"
+msgstr "Cassa de exito de %1$s - pagina %2$d"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2530,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
@@ -2642,7 +2610,6 @@ msgid "When to use SSL"
 msgstr "Quando usar SSL"
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
 msgstr "Servitor SSL"
 
@@ -2673,19 +2640,20 @@ msgid "Not a valid people tag: %s"
 msgstr "Etiquetta de personas invalide: %s"
 
 #: actions/peopletag.php:144
-#, fuzzy, php-format
+#, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Usatores auto-etiquettate con %s - pagina %d"
+msgstr "Usatores auto-etiquettate con %1$s - pagina %2$d"
 
 #: actions/postnotice.php:84
 msgid "Invalid notice content"
 msgstr "Le contento del nota es invalide"
 
 #: actions/postnotice.php:90
-#, fuzzy, php-format
+#, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
-"Le licentia del nota '%s' non es compatibile con le licentia del sito '%s'."
+"Le licentia del nota ‘%1$s’ non es compatibile con le licentia del sito ‘%2"
+"$s’."
 
 #: actions/profilesettings.php:60
 msgid "Profile settings"
@@ -2736,7 +2704,7 @@ msgstr "Bio"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Loco"
@@ -2909,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!"
@@ -2924,7 +2892,7 @@ msgstr ""
 "Proque non [registrar un conto](%%action.register%%) e devenir le prime a "
 "publicar un?"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Etiquettario"
 
@@ -3067,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."
@@ -3075,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."
@@ -3096,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
@@ -3123,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"
@@ -3138,7 +3105,7 @@ msgstr ""
 "messageria instantanee, numero de telephono."
 
 #: 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"
@@ -3155,9 +3122,9 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Felicitationes, %s! Benvenite a %%%%site.name%%%%. Ora tu pote...\n"
+"Felicitationes, %1$s! Benvenite a %%%%site.name%%%%. Ora tu pote...\n"
 "\n"
-"* Visitar [tu profilo](%s) e publicar tu prime message.\n"
+"* Visitar [tu profilo](%2$s) e publicar tu prime message.\n"
 "* Adder un [adresse Jabber/GTalk](%%%%action.imsettings%%%%) pro poter "
 "inviar notas per messages instantanee.\n"
 "* [Cercar personas](%%%%action.peoplesearch%%%%) que tu cognosce o con que "
@@ -3267,9 +3234,9 @@ msgid "Replies to %s"
 msgstr "Responsas a %s"
 
 #: actions/replies.php:127
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
-msgstr "Responsas a %1$s in %2$s!"
+msgstr "Responsas a %1$s, pagina %2$d"
 
 #: actions/replies.php:144
 #, php-format
@@ -3287,13 +3254,13 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Syndication de responsas pro %s (Atom)"
 
 #: actions/replies.php:198
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to his attention yet."
 msgstr ""
-"Isto es le chronologia de responsas a %s, ma %s non ha ancora recipite alcun "
-"nota a su attention."
+"Isto es le chronologia de responsas a %1$s, ma %2$s non ha ancora recipite "
+"alcun nota a su attention."
 
 #: actions/replies.php:203
 #, php-format
@@ -3305,13 +3272,13 @@ msgstr ""
 "personas o [devenir membro de gruppos](%%action.groups%%)."
 
 #: actions/replies.php:205
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to his or her "
 "attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Tu pote tentar [pulsar %s](../%s) o [publicar alique a su attention](%%%%"
-"action.newnotice%%%%?status_textarea=%s)."
+"Tu pote tentar [pulsar %1$s](../%2$s) o [publicar alique a su attention](%%%%"
+"action.newnotice%%%%?status_textarea=%3$s)."
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3319,9 +3286,8 @@ msgid "Replies to %1$s on %2$s!"
 msgstr "Responsas a %1$s in %2$s!"
 
 #: actions/rsd.php:146 actions/version.php:157
-#, fuzzy
 msgid "StatusNet"
-msgstr "Stato delite."
+msgstr "StatusNet"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
 msgid "You cannot sandbox users on this site."
@@ -3334,28 +3300,27 @@ msgstr "Usator es ja in cassa de sablo."
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:336
 msgid "Sessions"
-msgstr ""
+msgstr "Sessiones"
 
 #: actions/sessionsadminpanel.php:65
-#, fuzzy
 msgid "Session settings for this StatusNet site."
-msgstr "Configuration del apparentia de iste sito StatusNet."
+msgstr "Parametros de session pro iste sito StatusNet."
 
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
-msgstr ""
+msgstr "Gerer sessiones"
 
 #: actions/sessionsadminpanel.php:177
 msgid "Whether to handle sessions ourselves."
-msgstr ""
+msgstr "Si nos debe gerer le sessiones nos mesme."
 
 #: actions/sessionsadminpanel.php:181
 msgid "Session debugging"
-msgstr ""
+msgstr "Cercar defectos de session"
 
 #: actions/sessionsadminpanel.php:183
 msgid "Turn on debugging output for sessions."
-msgstr ""
+msgstr "Producer informationes technic pro cercar defectos in sessiones."
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
 #: actions/useradminpanel.php:293
@@ -3363,86 +3328,89 @@ msgid "Save site settings"
 msgstr "Salveguardar configurationes del sito"
 
 #: actions/showapplication.php:82
-#, fuzzy
 msgid "You must be logged in to view an application."
-msgstr "Tu debe aperir un session pro quitar un gruppo."
+msgstr "Tu debe aperir un session pro vider un application."
 
-#: actions/showapplication.php:158
-#, fuzzy
+#: actions/showapplication.php:157
 msgid "Application profile"
-msgstr "Le nota ha nulle profilo"
+msgstr "Profilo del application"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
-msgstr ""
+msgstr "Icone"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
-#, fuzzy
 msgid "Name"
-msgstr "Pseudonymo"
+msgstr "Nomine"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
-msgstr ""
+msgstr "Organisation"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
-msgstr ""
+msgstr "Description"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statisticas"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgstr "Create per %1$s - accesso %2$s per predefinition - %3$d usatores"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
-msgstr ""
+msgstr "Actiones de application"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
-msgstr ""
+msgstr "Reinitialisar clave e secreto"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
-msgstr ""
+msgstr "Info del application"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
-msgstr ""
+msgstr "Clave de consumitor"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
-msgstr ""
+msgstr "Secreto de consumitor"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
-msgstr ""
+msgstr "URL del indicio de requesta"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
-msgstr ""
+msgstr "URL del indicio de accesso"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr ""
+msgstr "URL de autorisation"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
+"Nota: Nos supporta le signaturas HMAC-SHA1. Nos non accepta signaturas in "
+"texto simple."
+
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Es tu secur de voler reinitialisar tu clave e secreto de consumitor?"
 
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "Notas favorite de %s"
+msgstr "Notas favorite de %1$s, pagina %2$d"
 
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
@@ -3502,21 +3470,21 @@ msgid "%s group"
 msgstr "Gruppo %s"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "Membros del gruppo %s, pagina %d"
+msgstr "Gruppo %1$s, pagina %2$d"
 
 #: actions/showgroup.php:218
 msgid "Group profile"
 msgstr "Profilo del gruppo"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Nota"
 
@@ -3626,14 +3594,14 @@ msgid " tagged %s"
 msgstr "  con etiquetta %s"
 
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s profilos blocate, pagina %d"
+msgstr "%1$s, pagina %2$d"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Syndication de notas pro %s con etiquetta %s (RSS 1.0)"
+msgstr "Syndication de notas pro %1$s con etiquetta %2$s (RSS 1.0)"
 
 #: actions/showstream.php:129
 #, php-format
@@ -3656,9 +3624,10 @@ msgid "FOAF for %s"
 msgstr "Amico de un amico pro %s"
 
 #: actions/showstream.php:200
-#, fuzzy, php-format
+#, php-format
 msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr "Isto es le chronologia pro %s, ma %s non ha ancora publicate alique."
+msgstr ""
+"Isto es le chronologia pro %1$s, ma %2$s non ha ancora publicate alique."
 
 #: actions/showstream.php:205
 msgid ""
@@ -3669,13 +3638,13 @@ msgstr ""
 "alcun nota, dunque iste es un bon momento pro comenciar :)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to his or her attention](%%%%"
 "action.newnotice%%%%?status_textarea=%2$s)."
 msgstr ""
-"Tu pote tentar pulsar %s o [publicar un nota a su attention](%%%%action."
-"newnotice%%%%?status_textarea=%s)."
+"Tu pote tentar pulsar %1$s o [publicar un nota a su attention](%%%%action."
+"newnotice%%%%?status_textarea=%2$s)."
 
 #: actions/showstream.php:243
 #, php-format
@@ -3724,14 +3693,13 @@ msgid "Site name must have non-zero length."
 msgstr "Le longitude del nomine del sito debe esser plus que zero."
 
 #: actions/siteadminpanel.php:140
-#, fuzzy
 msgid "You must have a valid contact email address."
 msgstr "Tu debe haber un valide adresse de e-mail pro contacto."
 
 #: actions/siteadminpanel.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "Unknown language \"%s\"."
-msgstr "Lingua \"%s\" incognite"
+msgstr "Lingua \"%s\" incognite."
 
 #: actions/siteadminpanel.php:165
 msgid "Invalid snapshot report URL."
@@ -3747,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."
@@ -3847,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"
@@ -3860,9 +3828,8 @@ msgstr ""
 "publicar le mesme cosa de novo."
 
 #: actions/smssettings.php:58
-#, fuzzy
 msgid "SMS settings"
-msgstr "Configuration SMS"
+msgstr "Parametros de SMS"
 
 #: actions/smssettings.php:69
 #, php-format
@@ -3890,7 +3857,6 @@ msgid "Enter the code you received on your phone."
 msgstr "Entra le codice que tu ha recipite in tu telephono."
 
 #: actions/smssettings.php:138
-#, fuzzy
 msgid "SMS phone number"
 msgstr "Numero de telephono pro SMS"
 
@@ -3982,9 +3948,9 @@ msgid "%s subscribers"
 msgstr "Subscriptores a %s"
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "Subscriptores a %s, pagina %d"
+msgstr "Subscriptores a %1$s, pagina %2$d"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4006,7 +3972,7 @@ msgstr ""
 #: actions/subscribers.php:110
 #, php-format
 msgid "%s has no subscribers. Want to be the first?"
-msgstr ""
+msgstr "%s non ha subscriptores. Vole esser le prime?"
 
 #: actions/subscribers.php:114
 #, php-format
@@ -4014,25 +3980,27 @@ msgid ""
 "%s has no subscribers. Why not [register an account](%%%%action.register%%%"
 "%) and be the first?"
 msgstr ""
+"%s non ha subscriptores. Proque non [crear un conto](%%%%action.register%%%"
+"%) e esser le prime?"
 
 #: actions/subscriptions.php:52
 #, php-format
 msgid "%s subscriptions"
-msgstr ""
+msgstr "Subscriptiones de %s"
 
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr "Subscriptores a %s, pagina %d"
+msgstr "Subscriptiones de %1$s, pagina %2$d"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
-msgstr ""
+msgstr "Tu seque le notas de iste personas."
 
 #: actions/subscriptions.php:69
 #, php-format
 msgid "These are the people whose notices %s listens to."
-msgstr ""
+msgstr "%s seque le notas de iste personas."
 
 #: actions/subscriptions.php:121
 #, php-format
@@ -4043,39 +4011,45 @@ msgid ""
 "featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
 "automatically subscribe to people you already follow there."
 msgstr ""
+"Tu non seque le notas de alcuno in iste momento. Tenta subscriber te a "
+"personas que tu cognosce. Proba [le recerca de personas](%%action."
+"peoplesearch%%), cerca membros in le gruppos de tu interesse e in le "
+"[usatores in evidentia](%%action.featured%%). Si tu es [usator de Twitter](%%"
+"action.twittersettings%%), tu pote automaticamente subscriber te a personas "
+"que tu ja seque la."
 
 #: actions/subscriptions.php:123 actions/subscriptions.php:127
 #, php-format
 msgid "%s is not listening to anyone."
-msgstr ""
+msgstr "%s non seque alcuno."
 
 #: actions/subscriptions.php:194
 msgid "Jabber"
-msgstr ""
+msgstr "Jabber"
 
 #: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
 msgid "SMS"
-msgstr ""
+msgstr "SMS"
 
 #: actions/tag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Usatores auto-etiquettate con %s - pagina %d"
+msgstr "Notas etiquettate con %1$s, pagina %2$d"
 
 #: actions/tag.php:86
 #, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr ""
+msgstr "Syndication de notas pro le etiquetta %s (RSS 1.0)"
 
 #: actions/tag.php:92
 #, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr ""
+msgstr "Syndication de notas pro le etiquetta %s (RSS 2.0)"
 
 #: actions/tag.php:98
 #, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr ""
+msgstr "Syndication de notas pro le etiquetta %s (Atom)"
 
 #: actions/tagother.php:39
 msgid "No ID argument."
@@ -4084,144 +4058,151 @@ msgstr "Nulle parametro de ID."
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
-msgstr ""
+msgstr "Etiquetta %s"
 
 #: actions/tagother.php:77 lib/userprofile.php:75
 msgid "User profile"
-msgstr ""
+msgstr "Profilo del usator"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
-msgstr ""
+msgstr "Photo"
 
 #: actions/tagother.php:141
 msgid "Tag user"
-msgstr ""
+msgstr "Etiquettar usator"
 
 #: actions/tagother.php:151
 msgid ""
 "Tags for this user (letters, numbers, -, ., and _), comma- or space- "
 "separated"
 msgstr ""
+"Etiquettas pro iste usator (litteras, numeros, -, . e _), separate per "
+"commas o spatios"
 
 #: actions/tagother.php:193
 msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
 msgstr ""
+"Tu pote solmente etiquettar personas a qui tu es subscribite o qui es "
+"subscribite a te."
 
 #: actions/tagother.php:200
 msgid "Could not save tags."
-msgstr ""
+msgstr "Non poteva salveguardar etiquettas."
 
 #: actions/tagother.php:236
 msgid "Use this form to add tags to your subscribers or subscriptions."
 msgstr ""
+"Usa iste formulario pro adder etiquettas a tu subscriptores o subscriptiones."
 
 #: actions/tagrss.php:35
 msgid "No such tag."
-msgstr ""
+msgstr "Etiquetta non existe."
 
 #: actions/twitapitrends.php:87
 msgid "API method under construction."
-msgstr ""
+msgstr "Methodo API in construction."
 
 #: actions/unblock.php:59
 msgid "You haven't blocked that user."
-msgstr ""
+msgstr "Tu non ha blocate iste usator."
 
 #: actions/unsandbox.php:72
 msgid "User is not sandboxed."
-msgstr ""
+msgstr "Le usator non es in le cassa de sablo."
 
 #: actions/unsilence.php:72
 msgid "User is not silenced."
-msgstr ""
+msgstr "Le usator non es silentiate."
 
 #: actions/unsubscribe.php:77
 msgid "No profile id in request."
-msgstr ""
+msgstr "Nulle ID de profilo in requesta."
 
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
-msgstr ""
+msgstr "Subscription cancellate"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
-#, fuzzy, php-format
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
-"Le licentia del nota '%s' non es compatibile con le licentia del sito '%s'."
+"Le licentia del fluxo que tu ascolta, ‘%1$s’, non es compatibile con le "
+"licentia del sito ‘%2$s’."
 
 #: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
 #: lib/personalgroupnav.php:115
 msgid "User"
-msgstr ""
+msgstr "Usator"
 
 #: actions/useradminpanel.php:69
 msgid "User settings for this StatusNet site."
-msgstr ""
+msgstr "Configurationes de usator pro iste sito de StatusNet."
 
 #: actions/useradminpanel.php:148
 msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Limite de biographia invalide. Debe esser un numero."
 
 #: actions/useradminpanel.php:154
 msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "Texto de benvenita invalide. Longitude maximal es 255 characteres."
 
 #: actions/useradminpanel.php:164
 #, php-format
 msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Subscription predefinite invalide: '%1$s' non es usator."
 
 #: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
 #: lib/personalgroupnav.php:109
 msgid "Profile"
-msgstr ""
+msgstr "Profilo"
 
 #: actions/useradminpanel.php:221
 msgid "Bio Limit"
-msgstr ""
+msgstr "Limite de biographia"
 
 #: actions/useradminpanel.php:222
 msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "Le longitude maximal del biographia de un profilo in characteres."
 
 #: actions/useradminpanel.php:230
 msgid "New users"
-msgstr ""
+msgstr "Nove usatores"
 
 #: actions/useradminpanel.php:234
 msgid "New user welcome"
-msgstr ""
+msgstr "Message de benvenita a nove usatores"
 
 #: actions/useradminpanel.php:235
 msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
+msgstr "Texto de benvenita pro nove usatores (max. 255 characteres)"
 
 #: actions/useradminpanel.php:240
 msgid "Default subscription"
-msgstr ""
+msgstr "Subscription predefinite"
 
 #: actions/useradminpanel.php:241
 msgid "Automatically subscribe new users to this user."
-msgstr ""
+msgstr "Subscriber automaticamente le nove usatores a iste usator."
 
 #: actions/useradminpanel.php:250
 msgid "Invitations"
-msgstr ""
+msgstr "Invitationes"
 
 #: actions/useradminpanel.php:255
 msgid "Invitations enabled"
-msgstr ""
+msgstr "Invitationes activate"
 
 #: actions/useradminpanel.php:257
 msgid "Whether to allow users to invite new users."
-msgstr ""
+msgstr "Si le usatores pote invitar nove usatores."
 
 #: actions/userauthorization.php:105
 msgid "Authorize subscription"
-msgstr ""
+msgstr "Autorisar subscription"
 
 #: actions/userauthorization.php:110
 msgid ""
@@ -4229,126 +4210,137 @@ msgid ""
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
+"Per favor verifica iste detalios pro assecurar te que tu vole subscriber te "
+"al notas de iste usator. Si tu non ha requestate isto, clicca \"Rejectar\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
-msgstr ""
+msgstr "Licentia"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
-msgstr ""
+msgstr "Acceptar"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
-msgstr ""
+msgstr "Subscriber me a iste usator"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
-msgstr ""
+msgstr "Rejectar"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
-msgstr ""
+msgstr "Rejectar iste subscription"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
-msgstr ""
+msgstr "Nulle requesta de autorisation!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
-msgstr ""
+msgstr "Subscription autorisate"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
+"Le subscription ha essite autorisate, ma nulle URL de retorno ha essite "
+"recipite. Lege in le instructiones del sito in question como autorisar le "
+"subscription. Tu indicio de subscription es:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
-msgstr ""
+msgstr "Subscription rejectate"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
+"Le subscription ha essite rejectate, ma nulle URL de retorno ha essite "
+"recipite. Lege in le instructiones del sito in question como rejectar "
+"completemente le subscription."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
-msgstr ""
+msgstr "URI de ascoltator ‘%s’ non trovate hic."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
-msgstr ""
+msgstr "URI de ascoltato ‘%s’ es troppo longe."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
-msgstr ""
+msgstr "URI de ascoltato ‘%s’ es un usator local."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
-msgstr ""
+msgstr "URL de profilo ‘%s’ es de un usator local."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
+msgstr "URL de avatar ‘%s’ non es valide."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr ""
+msgstr "Non pote leger URL de avatar ‘%s’."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr ""
+msgstr "Typo de imagine incorrecte pro URL de avatar ‘%s’."
 
 #: actions/userdesignsettings.php:76 lib/designsettings.php:65
 msgid "Profile design"
-msgstr ""
+msgstr "Apparentia del profilo"
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
 "Customize the way your profile looks with a background image and a colour "
 "palette of your choice."
 msgstr ""
+"Personalisa le apparentia de tu profilo con un imagine de fundo e un paletta "
+"de colores de tu preferentia."
 
 #: actions/userdesignsettings.php:282
 msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "Bon appetito!"
 
 #: actions/usergroups.php:64
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "Membros del gruppo %s, pagina %d"
+msgstr "Gruppos %1$s, pagina %2$d"
 
 #: actions/usergroups.php:130
 msgid "Search for more groups"
-msgstr ""
+msgstr "Cercar altere gruppos"
 
 #: actions/usergroups.php:153
 #, php-format
 msgid "%s is not a member of any group."
-msgstr ""
+msgstr "%s non es membro de alcun gruppo."
 
 #: actions/usergroups.php:158
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
 msgstr ""
+"Tenta [cercar gruppos](%%action.groupsearch%%) e facer te membro de illos."
 
 #: actions/version.php:73
-#, fuzzy, php-format
+#, php-format
 msgid "StatusNet %s"
-msgstr "Statisticas"
+msgstr "StatusNet %s"
 
 #: actions/version.php:153
 #, php-format
@@ -4356,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 ""
@@ -4368,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 ""
@@ -4376,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
@@ -4383,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
@@ -4403,261 +4406,264 @@ 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
-#, fuzzy, php-format
+#, php-format
 msgid "Could not create login token for %s"
-msgstr "Non poteva crear aliases."
+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
@@ -4665,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
@@ -4678,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:99
+#: 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:279
+#: 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
@@ -4907,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"
@@ -4948,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
@@ -4979,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"
@@ -4990,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."
@@ -5001,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 ""
@@ -5129,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
@@ -5395,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
@@ -5415,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
@@ -5438,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
@@ -5468,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
@@ -5492,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
@@ -5518,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
@@ -5538,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"
@@ -5707,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:466 lib/subs.php:48
+#: 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:491
+#: 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"
@@ -5859,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."
index 32ce7ee572218685fb5bc71c918ec4a818e937a6..e8858302582a0884b51f74ea2e1e138278308713 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:15+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 (r61864); 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"
@@ -180,22 +180,23 @@ msgstr "Færslur frá %1$s og vinum á %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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!"
@@ -569,7 +570,8 @@ msgstr "Aðgangur"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Stuttnefni"
@@ -760,7 +762,7 @@ msgstr "Upphafleg mynd"
 msgid "Preview"
 msgstr "Forsýn"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Eyða"
@@ -827,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"
 
@@ -1463,7 +1465,7 @@ msgstr "Þetta babl er nú þegar í uppáhaldi!"
 msgid "Disfavor favorite"
 msgstr "Ekki lengur í uppáhaldi"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Vinsælt babl"
@@ -1614,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 ""
 
@@ -1711,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 ""
 
@@ -2126,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"
@@ -2345,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ð."
 
@@ -2741,7 +2743,7 @@ msgstr "Lýsing"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Staðsetning"
@@ -2918,7 +2920,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Merkjaský"
 
@@ -3360,79 +3362,84 @@ msgstr "Stillingar fyrir mynd"
 msgid "You must be logged in to view an application."
 msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Babl hefur enga persónulega síðu"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Stuttnefni"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Uppröðun"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Lýsing"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Tölfræði"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Ertu viss um að þú viljir eyða þessu babli?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3497,12 +3504,12 @@ msgid "Group profile"
 msgstr "Hópssíðan"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "Vefslóð"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Athugasemd"
 
@@ -4057,7 +4064,8 @@ msgstr "Merki %s"
 msgid "User profile"
 msgstr "Persónuleg síða notanda"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Ljósmynd"
 
@@ -4121,7 +4129,7 @@ msgstr "Ekkert einkenni persónulegrar síðu í beiðni."
 msgid "Unsubscribed"
 msgstr "Ekki lengur áskrifandi"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4216,36 +4224,36 @@ msgstr ""
 "gerast áskrifandi að babli þessa notanda. Ef þú baðst ekki um að gerast "
 "áskrifandi að babli, smelltu þá á \"Hætta við\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Samþykkja"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Gerast áskrifandi að þessum notanda"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Hafna"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr ""
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Engin heimildarbeiðni!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Áskrift heimiluð"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4256,11 +4264,11 @@ msgstr ""
 "leiðbeiningar síðunnar um það hvernig á að heimila áskrift. Áskriftartókinn "
 "þinn er;"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Áskrift hafnað"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4270,37 +4278,37 @@ msgstr ""
 "Áskriftinni hefur verið hafnað en afturkallsveffang var ekki sent. Athugaðu "
 "leiðbeiningar síðunnar um það hvernig á að hafna áskrift alveg."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Get ekki lesið slóðina fyrir myndina '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Röng gerð myndar fyrir '%s'"
@@ -4484,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)"
@@ -4778,11 +4786,11 @@ msgstr "SMS staðfesting"
 msgid "Sessions configuration"
 msgstr "SMS staðfesting"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5789,12 +5797,12 @@ msgstr "Villa kom upp við að setja inn persónulega fjarsíðu"
 msgid "Duplicate notice"
 msgstr "Eyða babli"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "Þessi notandi hefur bannað þér að gerast áskrifandi"
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Gat ekki sett inn nýja áskrift."
 
@@ -6080,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"
 
index 43b1756ae4f7174959d8e33e49b3b0ae3a3e67f3..37ac228b23b131d67a51c22133a7437b4bea3dc8 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:24+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 (r61864); 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"
@@ -183,22 +183,23 @@ msgstr "Messaggi da %1$s e amici su %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -482,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
@@ -530,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
@@ -558,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"
@@ -565,7 +568,8 @@ msgstr "Account"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Soprannome"
@@ -576,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"
 
@@ -756,7 +758,7 @@ msgstr "Originale"
 msgid "Preview"
 msgstr "Anteprima"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Elimina"
@@ -823,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"
 
@@ -906,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"
 
@@ -925,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
@@ -947,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
@@ -1150,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
@@ -1458,7 +1440,7 @@ msgstr "Questo messaggio è già un preferito!"
 msgid "Disfavor favorite"
 msgstr "Rimuovi preferito"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Messaggi famosi"
@@ -1606,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"
 
@@ -1708,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"
 
@@ -1902,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
@@ -2126,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"
@@ -2151,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"
@@ -2239,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"
 
@@ -2287,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"
@@ -2348,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."
 
@@ -2362,7 +2339,6 @@ msgid "Notice Search"
 msgstr "Cerca messaggi"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
 msgstr "Altre impostazioni"
 
@@ -2395,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
@@ -2733,7 +2704,7 @@ msgstr "Biografia"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Ubicazione"
@@ -2918,7 +2889,7 @@ msgid ""
 "one!"
 msgstr "Perché non [crei un accout](%%action.register%%) e ne scrivi uno tu!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Insieme delle etichette"
 
@@ -3263,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
@@ -3332,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"
@@ -3358,87 +3328,89 @@ 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:158
-#, fuzzy
+#: actions/showapplication.php:157
 msgid "Application profile"
-msgstr "Il messaggio non ha un profilo"
+msgstr "Profilo applicazione"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
-msgstr ""
+msgstr "Icona"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Nome"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
-msgstr "Paginazione"
+msgstr "Organizzazione"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Descrizione"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistiche"
 
-#: actions/showapplication.php:204
+#: 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:214
+#: actions/showapplication.php:213
 msgid "Application actions"
-msgstr ""
+msgstr "Azioni applicazione"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
-msgstr ""
+msgstr "Reimposta chiave e segreto"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
-msgstr ""
+msgstr "Informazioni applicazione"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
-msgstr ""
+msgstr "Chiave consumatore"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
-msgstr ""
+msgstr "Segreto consumatore"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
-msgstr ""
+msgstr "URL token di richiesta"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
-msgstr ""
+msgstr "URL token di accesso"
 
-#: actions/showapplication.php:278
-#, fuzzy
+#: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr "Autore"
+msgstr "URL di autorizzazione"
 
-#: actions/showapplication.php:283
+#: 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
+msgid "Are you sure you want to reset your consumer key and secret?"
+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."
@@ -3497,21 +3469,21 @@ 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"
 msgstr "Profilo del gruppo"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Nota"
 
@@ -3621,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
@@ -3723,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."
 
@@ -4057,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
@@ -4089,7 +4061,8 @@ msgstr "Etichetta %s"
 msgid "User profile"
 msgstr "Profilo utente"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Fotografia"
 
@@ -4150,7 +4123,7 @@ msgstr "Nessun ID di profilo nella richiesta."
 msgid "Unsubscribed"
 msgstr "Abbonamento annullato"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4239,36 +4212,36 @@ msgstr ""
 "Controlla i dettagli seguenti per essere sicuro di volerti abbonare ai "
 "messaggi di questo utente. Se non hai richiesto ciò, fai clic su \"Rifiuta\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licenza"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Accetta"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Abbonati a questo utente"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Rifiuta"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Rifiuta questo abbonamento"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Nessuna richiesta di autorizzazione!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Abbonamento autorizzato"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4278,11 +4251,11 @@ msgstr ""
 "richiamo. Controlla le istruzioni del sito per i dettagli su come "
 "autorizzare l'abbonamento. Il tuo token per l'abbonamento è:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Abbonamento rifiutato"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4292,37 +4265,37 @@ msgstr ""
 "richiamo. Controlla le istruzioni del sito per i dettagli su come rifiutare "
 "completamente l'abbonamento."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "URL \"%s\" dell'ascoltatore non trovato qui."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "L'URI \"%s\" di colui che si ascolta è troppo lungo."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "L'URI \"%s\" di colui che si ascolta è un utente locale."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "L'URL \"%s\" del profilo è per un utente locale."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "L'URL \"%s\" dell'immagine non è valido."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Impossibile leggere l'URL \"%s\" dell'immagine."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Tipo di immagine errata per l'URL \"%s\"."
@@ -4344,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"
@@ -4447,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
@@ -4515,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"
@@ -4571,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"
 
@@ -4728,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 "
@@ -4788,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:99
+#: 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:279
+#: 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"
@@ -5246,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"
@@ -5445,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"
@@ -5835,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"
 
@@ -5849,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
@@ -5923,11 +5891,11 @@ msgstr "Errore nell'inserire il profilo remoto"
 msgid "Duplicate notice"
 msgstr "Messaggio duplicato"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Non ti è possibile abbonarti."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Impossibile inserire un nuovo abbonamento."
 
@@ -6034,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"
@@ -6201,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"
 
index 9102808d89e3bb0e37bf70b8e34d787ed020f654..3063f953896aca1ec16cd79fe7a71499192eebc8 100644 (file)
@@ -11,12 +11,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:28+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 (r61864); 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"
@@ -103,7 +103,7 @@ msgstr "そのようなページはありません。"
 #: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
 #: lib/subs.php:34 lib/subs.php:125
 msgid "No such user."
-msgstr "そのような利用者はいません。"
+msgstr "そのようなユーザはいません。"
 
 #: actions/all.php:84
 #, php-format
@@ -180,22 +180,23 @@ msgstr "%2$s に %1$s と友人からの更新があります!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 メソッドが見つかりません。"
 
@@ -223,7 +224,7 @@ msgstr ""
 
 #: actions/apiaccountupdatedeliverydevice.php:132
 msgid "Could not update user."
-msgstr "利用者を更新できませんでした。"
+msgstr "ユーザを更新できませんでした。"
 
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
@@ -232,7 +233,7 @@ msgstr "利用者を更新できませんでした。"
 #: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
 #: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
 msgid "User has no profile."
-msgstr "利用者はプロフィールをもっていません。"
+msgstr "ユーザはプロフィールをもっていません。"
 
 #: actions/apiaccountupdateprofile.php:147
 msgid "Could not save profile."
@@ -273,11 +274,11 @@ msgstr "自分自身をブロックすることはできません!"
 
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
-msgstr "利用者のブロックに失敗しました。"
+msgstr "ユーザのブロックに失敗しました。"
 
 #: actions/apiblockdestroy.php:114
 msgid "Unblock user failed."
-msgstr "利用者のブロック解除に失敗しました。"
+msgstr "ユーザのブロック解除に失敗しました。"
 
 #: actions/apidirectmessage.php:89
 #, php-format
@@ -310,11 +311,11 @@ msgstr "長すぎます。メッセージは最大 %d 字までです。"
 
 #: actions/apidirectmessagenew.php:146
 msgid "Recipient user not found."
-msgstr "受け取り手の利用者が見つかりません。"
+msgstr "受け取り手のユーザが見つかりません。"
 
 #: actions/apidirectmessagenew.php:150
 msgid "Can't send direct messages to users who aren't your friend."
-msgstr "友人でない利用者にダイレクトメッセージを送ることはできません。"
+msgstr "友人でないユーザにダイレクトメッセージを送ることはできません。"
 
 #: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
 #: actions/apistatusesdestroy.php:113
@@ -339,17 +340,17 @@ msgstr "お気に入りを取り消すことができません。"
 
 #: actions/apifriendshipscreate.php:109
 msgid "Could not follow user: User not found."
-msgstr "利用者をフォローできませんでした: 利用者が見つかりません。"
+msgstr "ユーザをフォローできませんでした: ユーザが見つかりません。"
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
 msgid "Could not follow user: %s is already on your list."
 msgstr ""
-"利用者をフォローできませんでした: %s は既にあなたのリストに入っています。"
+"ユーザをフォローできませんでした: %s は既にあなたのリストに入っています。"
 
 #: actions/apifriendshipsdestroy.php:109
 msgid "Could not unfollow user: User not found."
-msgstr "利用者のフォローを停止できませんでした: 利用者が見つかりません。"
+msgstr "ユーザのフォローを停止できませんでした: ユーザが見つかりません。"
 
 #: actions/apifriendshipsdestroy.php:120
 msgid "You cannot unfollow yourself."
@@ -452,7 +453,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."
@@ -461,7 +462,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
@@ -480,12 +481,11 @@ msgstr "%s 上のグループ"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "oauth_token パラメータは提供されませんでした。"
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "ä¸\8dæ­£ã\81ªã\82µã\82¤ã\82º。"
+msgstr "ä¸\8dæ­£ã\81ªã\83\88ã\83¼ã\82¯ã\83³。"
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -510,14 +510,12 @@ msgid "Invalid nickname / password!"
 msgstr "不正なユーザ名またはパスワード。"
 
 #: actions/apioauthauthorize.php:159
-#, fuzzy
 msgid "Database error deleting OAuth application user."
-msgstr "OAuth アプリユーザの削除時DBエラー。"
+msgstr "OAuth ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¦ã\83¼ã\82¶ã\81®å\89\8aé\99¤æ\99\82DBã\82¨ã\83©ã\83¼ã\80\82"
 
 #: actions/apioauthauthorize.php:185
-#, fuzzy
 msgid "Database error inserting OAuth application user."
-msgstr "OAuth アプリユーザの追加時DBエラー。"
+msgstr "OAuth ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83¦ã\83¼ã\82¶ã\81®è¿½å\8a æ\99\82DBã\82¨ã\83©ã\83¼ã\80\82"
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -529,9 +527,9 @@ msgstr ""
 "さい。"
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "リクエストトークン%sは否定されました。"
+msgstr "リクエストトークン%sは、拒否されて、取り消されました。"
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -564,7 +562,8 @@ msgstr "アカウント"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "ニックネーム"
@@ -592,7 +591,7 @@ msgstr "このメソッドには POST か DELETE が必要です。"
 
 #: actions/apistatusesdestroy.php:130
 msgid "You may not delete another user's status."
-msgstr "他の利用者のステータスを消すことはできません。"
+msgstr "他のユーザのステータスを消すことはできません。"
 
 #: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
 #: actions/deletenotice.php:52 actions/shownotice.php:92
@@ -734,7 +733,7 @@ msgstr "自分のアバターをアップロードできます。最大サイズ
 #: actions/remotesubscribe.php:191 actions/userauthorization.php:72
 #: actions/userrss.php:103
 msgid "User without matching profile"
-msgstr "合っているプロフィールのない利用者"
+msgstr "合っているプロフィールのないユーザ"
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:251
@@ -751,7 +750,7 @@ msgstr "オリジナル"
 msgid "Preview"
 msgstr "プレビュー"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "削除"
@@ -786,11 +785,11 @@ msgstr "アバターが削除されました。"
 
 #: actions/block.php:69
 msgid "You already blocked that user."
-msgstr "その利用者はすでにブロック済みです。"
+msgstr "そのユーザはすでにブロック済みです。"
 
 #: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
 msgid "Block user"
-msgstr "ã\83\96ã\83­ã\83\83ã\82¯å\88©ç\94¨è\80\85"
+msgstr "ã\83¦ã\83¼ã\82¶ã\82\92ã\83\96ã\83­ã\83\83ã\82¯"
 
 #: actions/block.php:130
 #, fuzzy
@@ -819,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 "このユーザをブロックする"
 
@@ -849,11 +848,11 @@ msgstr "%1$s ブロックされたプロファイル、ページ %2$d"
 
 #: actions/blockedfromgroup.php:108
 msgid "A list of the users blocked from joining this group."
-msgstr "このグループへの参加をブロックされた利用者のリスト。"
+msgstr "このグループへの参加をブロックされたユーザのリスト。"
 
 #: actions/blockedfromgroup.php:281
 msgid "Unblock user from group"
-msgstr "グループからのアンブロック利用者"
+msgstr "グループからのアンブロックユーザ"
 
 #: actions/blockedfromgroup.php:313 lib/unblockform.php:69
 msgid "Unblock"
@@ -920,14 +919,12 @@ msgid "Notices"
 msgstr "つぶやき"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "アプリケーションを編集するにはログインしていなければなりません。"
+msgstr "アプリケーションを削除するにはログインしていなければなりません。"
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "アプリケーション情報"
+msgstr "アプリケーションが見つかりません。"
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -941,9 +938,8 @@ msgid "There was a problem with your session token."
 msgstr "あなたのセッショントークンに関する問題がありました。"
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "アプリケーション編集"
+msgstr "アプリケーション削除"
 
 #: actions/deleteapplication.php:149
 #, fuzzy
@@ -952,18 +948,16 @@ msgid ""
 "about the application from the database, including all existing user "
 "connections."
 msgstr ""
-"あなたは本当にこの利用者を削除したいですか? これはバックアップなしでデータ"
-"ベースから利用者に関するすべてのデータをクリアします。"
+"あなたは本当にこのユーザを削除したいですか? これはバックアップなしでデータ"
+"ベースからユーザに関するすべてのデータをクリアします。"
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "ã\81\93ã\81®ã\81¤ã\81¶ã\82\84ã\81\8dã\82\92å\89\8aé\99¤ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82"
+msgstr "ã\81\93ã\81®ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\82\92å\89\8aé\99¤ã\81\97ã\81ªã\81\84ã\81§ã\81\8fã\81 ã\81\95ã\81\84"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "ã\81\93ã\81®ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\81®ã\82¢ã\82¤ã\82³ã\83³"
+msgstr "ã\81\93ã\81®ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\82\92å\89\8aé\99¤"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1005,27 +999,27 @@ msgstr "このつぶやきを削除"
 
 #: actions/deleteuser.php:67
 msgid "You cannot delete users."
-msgstr "利用者を削除できません"
+msgstr "ユーザを削除できません"
 
 #: actions/deleteuser.php:74
 msgid "You can only delete local users."
-msgstr "ローカル利用者のみ削除できます。"
+msgstr "ローカルユーザのみ削除できます。"
 
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
 msgid "Delete user"
-msgstr "利用者削除"
+msgstr "ユーザ削除"
 
 #: actions/deleteuser.php:135
 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 ""
-"あなたは本当にこの利用者を削除したいですか? これはバックアップなしでデータ"
-"ベースから利用者に関するすべてのデータをクリアします。"
+"あなたは本当にこのユーザを削除したいですか? これはバックアップなしでデータ"
+"ベースからユーザに関するすべてのデータをクリアします。"
 
 #: actions/deleteuser.php:148 lib/deleteuserform.php:77
 msgid "Delete this user"
-msgstr "ã\81\93ã\81®ã\83¦ã\83¼ã\82¶ã\83¼ã\82\92å\89\8aé\99¤"
+msgstr "このユーザを削除"
 
 #: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
 #: lib/adminpanelaction.php:316 lib/groupnav.php:119
@@ -1174,7 +1168,6 @@ msgid "Name is too long (max 255 chars)."
 msgstr "名前が長すぎます。(最大255字まで)"
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
 msgstr "そのニックネームは既に使用されています。他のものを試してみて下さい。"
 
@@ -1422,7 +1415,7 @@ msgstr "入ってくるメールアドレスではありません。"
 #: actions/emailsettings.php:456 actions/emailsettings.php:478
 #: actions/smssettings.php:528 actions/smssettings.php:552
 msgid "Couldn't update user record."
-msgstr "利用者レコードを更新できません。"
+msgstr "ユーザレコードを更新できません。"
 
 #: actions/emailsettings.php:459 actions/smssettings.php:531
 msgid "Incoming email address removed."
@@ -1440,7 +1433,7 @@ msgstr "このつぶやきはすでにお気に入りです!"
 msgid "Disfavor favorite"
 msgstr "お気に入りをやめる"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "人気のつぶやき"
@@ -1491,17 +1484,17 @@ msgstr "%1$s による %2$s 上のお気に入りを更新!"
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
-msgstr "フィーチャーされた利用者"
+msgstr "フィーチャーされたユーザ"
 
 #: actions/featured.php:71
 #, php-format
 msgid "Featured users, page %d"
-msgstr "フィーチャーされた利用者、ページ %d"
+msgstr "フィーチャーされたユーザ、ページ %d"
 
 #: actions/featured.php:99
 #, php-format
 msgid "A selection of some great users on %s"
-msgstr "%s 上の優れた利用者の集まり"
+msgstr "%s 上の優れたユーザの集まり"
 
 #: actions/file.php:34
 msgid "No notice ID."
@@ -1533,7 +1526,7 @@ msgstr "ローカルサブスクリプションを使用可能です!"
 
 #: actions/finishremotesubscribe.php:99
 msgid "That user has blocked you from subscribing."
-msgstr "この利用者はフォローをブロックされています。"
+msgstr "このユーザはフォローをブロックされています。"
 
 #: actions/finishremotesubscribe.php:110
 msgid "You are not authorized."
@@ -1583,15 +1576,15 @@ msgstr "管理者だけがグループメンバーをブロックできます。
 
 #: actions/groupblock.php:95
 msgid "User is already blocked from group."
-msgstr "利用者はすでにグループからブロックされています。"
+msgstr "ユーザはすでにグループからブロックされています。"
 
 #: actions/groupblock.php:100
 msgid "User is not a member of group."
-msgstr "利用者はグループのメンバーではありません。"
+msgstr "ユーザはグループのメンバーではありません。"
 
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:316
 msgid "Block user from group"
-msgstr "ã\82°ã\83«ã\83¼ã\83\97ã\81\8bã\82\89ã\83\96ã\83­ã\83\83ã\82¯ã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85"
+msgstr "ã\82°ã\83«ã\83¼ã\83\97ã\81\8bã\82\89ã\83¦ã\83¼ã\82¶ã\82\92ã\83\96ã\83­ã\83\83ã\82¯"
 
 #: actions/groupblock.php:162
 #, php-format
@@ -1600,12 +1593,12 @@ msgid ""
 "will be removed from the group, unable to post, and unable to subscribe to "
 "the group in the future."
 msgstr ""
-"本当に利用者 %1$s をグループ %2$s からブロックしますか? 彼らはグループから削"
+"本当にユーザ %1$s をグループ %2$s からブロックしますか? 彼らはグループから削"
 "除される、投稿できない、グループをフォローできなくなります。"
 
 #: actions/groupblock.php:178
 msgid "Do not block this user from this group"
-msgstr "このグループからこの利用者をブロックしない"
+msgstr "このグループからこのユーザをブロックしない"
 
 #: actions/groupblock.php:179
 msgid "Block this user from this group"
@@ -1613,7 +1606,7 @@ msgstr "このグループからこのユーザをブロック"
 
 #: actions/groupblock.php:196
 msgid "Database error blocking user from group."
-msgstr "グループから利用者ブロックのデータベースエラー"
+msgstr "グループからのブロックユーザのデータベースエラー"
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
 msgid "No ID."
@@ -1658,7 +1651,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."
@@ -1684,27 +1677,27 @@ msgstr "%1$s グループメンバー、ページ %2$d"
 
 #: actions/groupmembers.php:111
 msgid "A list of the users in this group."
-msgstr "このグループの利用者のリスト。"
+msgstr "このグループのユーザのリスト。"
 
 #: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
 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 "利用者をグループの管理者にする"
+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 "この利用者を管理者にする"
+msgstr "このユーザを管理者にする"
 
 #: actions/grouprss.php:133
 #, php-format
@@ -1782,7 +1775,7 @@ msgstr "管理者だけがグループメンバーをアンブロックできま
 
 #: actions/groupunblock.php:95
 msgid "User is not blocked from group."
-msgstr "利用者はグループからブロックされていません。"
+msgstr "ユーザはグループからブロックされていません。"
 
 #: actions/groupunblock.php:128 actions/unblock.php:86
 msgid "Error removing the block."
@@ -1917,11 +1910,11 @@ msgstr "招待を送りました。"
 
 #: actions/invite.php:112
 msgid "Invite new users"
-msgstr "新しい利用者を招待"
+msgstr "新しいユーザを招待"
 
 #: actions/invite.php:128
 msgid "You are already subscribed to these users:"
-msgstr "すでにこれらの利用者をフォローしています:"
+msgstr "すでにこれらのユーザをフォローしています:"
 
 #: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
 #, php-format
@@ -2107,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 の管理者にすることはできません"
@@ -2164,7 +2157,7 @@ msgstr "新しいメッセージ"
 
 #: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
 msgid "You can't send a message to this user."
-msgstr "この利用者にメッセージを送ることはできません。"
+msgstr "このユーザにメッセージを送ることはできません。"
 
 #: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
 #: lib/command.php:475
@@ -2251,7 +2244,7 @@ msgstr "\"%2$s\" 上の検索語 \"$1$s\" に一致するすべての更新"
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set his email yet."
 msgstr ""
-"この利用者は、合図を許可していないか、確認されていた状態でないか、メール設定"
+"このユーザは、合図を許可していないか、確認されていた状態でないか、メール設定"
 "をしていません。"
 
 #: actions/nudge.php:94
@@ -2289,7 +2282,7 @@ msgstr "あなたのアカウントにアクセスする以下のアプリケー
 
 #: actions/oauthconnectionssettings.php:175
 msgid "You are not a user of that application."
-msgstr "あなたはそのアプリケーションの利用者ではありません。"
+msgstr "あなたはそのアプリケーションのユーザではありません。"
 
 #: actions/oauthconnectionssettings.php:186
 msgid "Unable to revoke access for app: "
@@ -2323,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 "サポートされていないデータ形式。"
 
@@ -2370,7 +2363,7 @@ msgstr "URL 短縮サービスが長すぎます。(最大50字)"
 
 #: actions/otp.php:69
 msgid "No user ID specified."
-msgstr "利用者IDの記述がありません。"
+msgstr "ユーザIDの記述がありません。"
 
 #: actions/otp.php:83
 msgid "No login token specified."
@@ -2700,7 +2693,7 @@ msgstr "自己紹介"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "場所"
@@ -2767,7 +2760,7 @@ msgstr "不正なタグ: \"%s\""
 
 #: actions/profilesettings.php:302
 msgid "Couldn't update user for autosubscribe."
-msgstr "自動フォローのための利用者を更新できませんでした。"
+msgstr "自動フォローのためのユーザを更新できませんでした。"
 
 #: actions/profilesettings.php:359
 msgid "Couldn't save location prefs."
@@ -2889,7 +2882,7 @@ msgstr ""
 "なぜ [アカウント登録](%%action.register%%) しないのですか。そして最初の投稿を"
 "してください!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "タグクラウド"
 
@@ -2919,7 +2912,7 @@ msgstr "確認コードが古すぎます。もう一度やり直してくださ
 
 #: actions/recoverpassword.php:111
 msgid "Could not update user with confirmed email address."
-msgstr "確認されたメールアドレスで利用者を更新できません。"
+msgstr "確認されたメールアドレスでユーザを更新できません。"
 
 #: actions/recoverpassword.php:152
 msgid ""
@@ -2979,11 +2972,11 @@ msgstr "ニックネームかメールアドレスを入力してください。
 
 #: actions/recoverpassword.php:272
 msgid "No user with that email address or username."
-msgstr "そのメールアドレスかユーザ名をもっている利用者がありません。"
+msgstr "そのメールアドレスかユーザ名をもっているユーザがありません。"
 
 #: actions/recoverpassword.php:287
 msgid "No registered email address for that user."
-msgstr "その利用者にはメールアドレスの登録がありません。"
+msgstr "そのユーザにはメールアドレスの登録がありません。"
 
 #: actions/recoverpassword.php:301
 msgid "Error saving address confirmation."
@@ -3097,7 +3090,7 @@ msgid ""
 msgstr "個人情報を除く: パスワード、メールアドレス、IMアドレス、電話番号"
 
 #: 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"
@@ -3114,15 +3107,15 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"%1$s さん、おめでとうございます!%%%%site.name%%%% へようこそ。以下のようにし"
-"始めることができます。\n"
+"%1$s さん、おめでとうございます!%%%%site.name%%%% へようこそ。次のようにして"
+"始めることができます。\n"
 "\n"
 "* [あなたのプロファイル](%2$s) を参照して最初のメッセージを投稿する\n"
 "* [Jabber や GTalk のアドレス](%%%%action.imsettings%%%%) を追加して、インス"
 "タントメッセージを通してつぶやきを送れるようにする\n"
 "* あなたが知っている人やあなたと同じ興味をもっている人を[検索](%%%%action."
 "peoplesearch%%%%) する\n"
-"* [プロファイル設定](%%%%action.profilesettings%%%%) を更新して他の利用者にあ"
+"* [プロファイル設定](%%%%action.profilesettings%%%%) を更新して他のユーザにあ"
 "なたのことをより詳しく知らせる\n"
 "* 探している機能について[オンライン文書](%%%%doc.help%%%%) を読む\n"
 "\n"
@@ -3159,7 +3152,7 @@ msgstr "リモートユーザーをフォロー"
 
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
-msgstr "利用者のニックネーム"
+msgstr "ユーザのニックネーム"
 
 #: actions/remotesubscribe.php:130
 msgid "Nickname of the user you want to follow"
@@ -3263,7 +3256,7 @@ msgid ""
 "[join groups](%%action.groups%%)."
 msgstr ""
 "あなたは、他のユーザを会話をするか、多くの人々をフォローするか、または [グ"
-"ループに加わる] (%%action.groups%%)ことができます。"
+"ループに加わる](%%action.groups%%)ことができます。"
 
 #: actions/replies.php:205
 #, php-format
@@ -3289,7 +3282,7 @@ msgstr "あなたはこのサイトのサンドボックスユーザができま
 
 #: actions/sandbox.php:72
 msgid "User is already sandboxed."
-msgstr "利用者はすでにサンドボックスです。"
+msgstr "ユーザはすでにサンドボックスです。"
 
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:336
@@ -3297,9 +3290,8 @@ msgid "Sessions"
 msgstr "セッション"
 
 #: actions/sessionsadminpanel.php:65
-#, fuzzy
 msgid "Session settings for this StatusNet site."
-msgstr "ã\81\93ã\81® StatusNet ã\82µã\82¤ã\83\88ã\81®ã\83\87ã\82¶ã\82¤ン設定。"
+msgstr "ã\81\93ã\81® StatusNet ã\82µã\82¤ã\83\88ã\81®ã\82»ã\83\83ã\82·ã\83§ン設定。"
 
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
@@ -3326,71 +3318,71 @@ msgstr "サイト設定の保存"
 msgid "You must be logged in to view an application."
 msgstr "!!アプリケーションを見るためにはログインしていなければなりません。"
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "アプリケーションプロファイル"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "アイコン"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "名前"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "組織"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "概要"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "統計データ"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "アプリケーションアクション"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "key と secret のリセット"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "アプリケーション情報"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "リクエストトークンURL"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "アクセストークンURL"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "承認URL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3398,6 +3390,11 @@ msgstr ""
 "注意: 私たちはHMAC-SHA1署名をサポートします。 私たちは平文署名メソッドをサ"
 "ポートしません。"
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "本当にこのつぶやきを削除しますか?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3470,12 +3467,12 @@ msgid "Group profile"
 msgstr "グループプロファイル"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "ノート"
 
@@ -3644,7 +3641,7 @@ msgid ""
 "[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
 "follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
 msgstr ""
-"**%s** は %%site.name%% 上のアカウントです。フリーソフトウェアツール"
+"**%s** は %%%%site.name%%%% 上のアカウントです。フリーソフトウェアツール"
 "[StatusNet](http://status.net/)を基にした[マイクロブロギング](http://en."
 "wikipedia.org/wiki/Micro-blogging) サービス。[今すぐ参加](%%%%action.register"
 "%%%%)して、**%s** のつぶやきなどをフォローしましょう! ([もっと読む](%%%%doc."
@@ -3672,7 +3669,7 @@ msgstr "あなたはこのサイトでユーザを黙らせることができま
 
 #: actions/silence.php:72
 msgid "User is already silenced."
-msgstr "利用者は既に黙っています。"
+msgstr "ユーザは既に黙っています。"
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site."
@@ -3880,7 +3877,7 @@ msgstr "これはすでにあなたの電話番号です。"
 
 #: actions/smssettings.php:321
 msgid "That phone number already belongs to another user."
-msgstr "この電話番号はすでに他の利用者に使われています。"
+msgstr "この電話番号はすでに他のユーザに使われています。"
 
 #: actions/smssettings.php:347
 msgid ""
@@ -4007,7 +4004,7 @@ msgid ""
 msgstr ""
 "今、だれのつぶやきも聞いていないなら、あなたが知っている人々をフォローしてみ"
 "てください。[ピープル検索](%%action.peoplesearch%%)を試してください。そして、"
-"あなたが興味を持っているグループと私たちの[フィーチャーされた利用者](%%"
+"あなたが興味を持っているグループと私たちの[フィーチャーされたユーザ](%%"
 "action.featured%%)のメンバーを探してください。もし[Twitterユーザ](%%action."
 "twittersettings%%)であれば、あなたは自動的に既にフォローしている人々をフォ"
 "ローできます。"
@@ -4056,22 +4053,23 @@ msgstr "タグ %s"
 
 #: actions/tagother.php:77 lib/userprofile.php:75
 msgid "User profile"
-msgstr "利用者プロファイル"
+msgstr "ユーザプロファイル"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "写真"
 
 #: actions/tagother.php:141
 msgid "Tag user"
-msgstr "タグ利用者"
+msgstr "タグユーザ"
 
 #: actions/tagother.php:151
 msgid ""
 "Tags for this user (letters, numbers, -, ., and _), comma- or space- "
 "separated"
 msgstr ""
-"この利用者のタグ (アルファベット、数字、-、.、_)、カンマかスペース区切り"
+"このユーザのタグ (アルファベット、数字、-、.、_)、カンマかスペース区切り"
 
 #: actions/tagother.php:193
 msgid ""
@@ -4102,11 +4100,11 @@ msgstr "あなたはそのユーザをブロックしていません。"
 
 #: actions/unsandbox.php:72
 msgid "User is not sandboxed."
-msgstr "利用者はサンドボックスではありません。"
+msgstr "ユーザはサンドボックスではありません。"
 
 #: actions/unsilence.php:72
 msgid "User is not silenced."
-msgstr "利用者はサイレンスではありません。"
+msgstr "ユーザはサイレンスではありません。"
 
 #: actions/unsubscribe.php:77
 msgid "No profile id in request."
@@ -4116,7 +4114,7 @@ msgstr "リクエスト内にプロファイルIDがありません。"
 msgid "Unsubscribed"
 msgstr "フォロー解除済み"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4127,11 +4125,11 @@ msgstr ""
 #: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
 #: lib/personalgroupnav.php:115
 msgid "User"
-msgstr "利用者"
+msgstr "ユーザ"
 
 #: actions/useradminpanel.php:69
 msgid "User settings for this StatusNet site."
-msgstr "この StatusNet サイトの利用者設定。"
+msgstr "この StatusNet サイトのユーザ設定。"
 
 #: actions/useradminpanel.php:148
 msgid "Invalid bio limit. Must be numeric."
@@ -4144,7 +4142,7 @@ msgstr "不正なウェルカムテキスト。最大長は255字です。"
 #: actions/useradminpanel.php:164
 #, php-format
 msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr "不正なデフォルトフォローです: '%1$s'  は利用者ではありません。"
+msgstr "不正なデフォルトフォローです: '%1$s'  はユーザではありません。"
 
 #: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
 #: lib/personalgroupnav.php:109
@@ -4161,15 +4159,15 @@ msgstr "プロファイル自己紹介の最大文字長。"
 
 #: actions/useradminpanel.php:230
 msgid "New users"
-msgstr "新しい利用者"
+msgstr "新しいユーザ"
 
 #: actions/useradminpanel.php:234
 msgid "New user welcome"
-msgstr "新しい利用者を歓迎"
+msgstr "新しいユーザを歓迎"
 
 #: actions/useradminpanel.php:235
 msgid "Welcome text for new users (Max 255 chars)."
-msgstr "新しい利用者へのウェルカムテキスト (最大255字)。"
+msgstr "新しいユーザへのウェルカムテキスト (最大255字)。"
 
 #: actions/useradminpanel.php:240
 msgid "Default subscription"
@@ -4177,7 +4175,7 @@ msgstr "デフォルトフォロー"
 
 #: actions/useradminpanel.php:241
 msgid "Automatically subscribe new users to this user."
-msgstr "自動的にこの利用者に新しい利用者をフォローしてください。"
+msgstr "自動的にこのユーザに新しいユーザをフォローしてください。"
 
 #: actions/useradminpanel.php:250
 msgid "Invitations"
@@ -4189,7 +4187,7 @@ msgstr "招待が可能"
 
 #: actions/useradminpanel.php:257
 msgid "Whether to allow users to invite new users."
-msgstr "利用者が新しい利用者を招待するのを許容するかどうか。"
+msgstr "ユーザが新しいユーザを招待するのを許容するかどうか。"
 
 #: actions/userauthorization.php:105
 msgid "Authorize subscription"
@@ -4204,36 +4202,36 @@ msgstr ""
 "ユーザのつぶやきをフォローするには詳細を確認して下さい。だれかのつぶやきを"
 "フォローするために尋ねない場合は、\"Reject\" をクリックして下さい。"
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "ライセンス"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "承認"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "このユーザーをフォロー"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "拒否"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "このフォローを拒否"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "認証のリクエストがありません。"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "フォローが承認されました"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4243,11 +4241,11 @@ msgstr ""
 "フォローを承認するかに関する詳細のためのサイトの指示をチェックしてください。"
 "あなたのフォロートークンは:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "フォローが拒否"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4257,37 +4255,37 @@ msgstr ""
 "フォローを完全に拒絶するかに関する詳細のためのサイトの指示をチェックしてくだ"
 "さい。"
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "リスナー URI  ‘%s’ はここでは見つかりません。"
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "リスニー URI  ‘%s’ が長すぎます。"
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "リスニー URI  ‘%s’ はローカルユーザーではありません。"
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "プロファイル URL  ‘%s’ はローカルユーザーではありません。"
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "アバター URL  ‘%s’ が正しくありません。"
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "アバターURL を読み取れません '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "アバター URL '%s' は不正な画像形式。"
@@ -4443,7 +4441,7 @@ msgstr "つぶやきを保存する際に問題が発生しました。長すぎ
 
 #: classes/Notice.php:218
 msgid "Problem saving notice. Unknown user."
-msgstr "つぶやきを保存する際に問題が発生しました。不明な利用者です。"
+msgstr "つぶやきを保存する際に問題が発生しました。不明なユーザです。"
 
 #: classes/Notice.php:223
 msgid ""
@@ -4476,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 ""
@@ -4741,7 +4739,7 @@ msgstr "デザイン設定"
 
 #: lib/adminpanelaction.php:322
 msgid "User configuration"
-msgstr "利用者設定"
+msgstr "ユーザ設定"
 
 #: lib/adminpanelaction.php:327
 msgid "Access configuration"
@@ -4755,13 +4753,13 @@ msgstr "パス設定"
 msgid "Sessions configuration"
 msgstr "セッション設定"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 "APIリソースは読み書きアクセスが必要です、しかしあなたは読みアクセスしか持って"
 "いません。"
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -4909,7 +4907,7 @@ msgstr "その ID によるつぶやきは存在していません"
 #: lib/command.php:168 lib/command.php:406 lib/command.php:467
 #: lib/command.php:523
 msgid "User has no last notice"
-msgstr "利用者はまだつぶやいていません"
+msgstr "ユーザはまだつぶやいていません"
 
 #: lib/command.php:190
 msgid "Notice marked as fave."
@@ -4922,7 +4920,7 @@ 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
@@ -4932,7 +4930,7 @@ 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
@@ -5006,7 +5004,7 @@ msgstr "つぶやき保存エラー。"
 
 #: lib/command.php:547
 msgid "Specify the name of the user to subscribe to"
-msgstr "フォローする利用者の名前を指定してください"
+msgstr "フォローするユーザの名前を指定してください"
 
 #: lib/command.php:554
 #, php-format
@@ -5266,7 +5264,7 @@ msgstr "ブロック"
 #: lib/groupnav.php:102
 #, php-format
 msgid "%s blocked users"
-msgstr "%s ブロック利用者"
+msgstr "%s ブロックユーザ"
 
 #: lib/groupnav.php:108
 #, php-format
@@ -5615,14 +5613,14 @@ msgstr ""
 
 #: lib/mailbox.php:89
 msgid "Only the user can read their own mailboxes."
-msgstr "利用者だけがそれら自身のメールボックスを読むことができます。"
+msgstr "ユーザだけがかれら自身のメールボックスを読むことができます。"
 
 #: 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 ""
-"あなたには、プライベートメッセージが全くありません。あなたは他の利用者を会話"
+"あなたには、プライベートメッセージが全くありません。あなたは他のユーザを会話"
 "に引き込むプライベートメッセージを送ることができます。人々はあなただけへの"
 "メッセージを送ることができます。"
 
@@ -5831,11 +5829,11 @@ msgstr "リモートプロファイル追加エラー"
 msgid "Duplicate notice"
 msgstr "重複したつぶやき"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "あなたはフォローが禁止されました。"
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "サブスクリプションを追加できません"
 
@@ -5894,7 +5892,7 @@ msgstr "すべてのフォローされている"
 
 #: lib/profileaction.php:178
 msgid "User ID"
-msgstr "利用者ID"
+msgstr "ユーザID"
 
 #: lib/profileaction.php:183
 msgid "Member since"
@@ -5942,7 +5940,7 @@ msgstr "このつぶやきを繰り返す"
 
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "single-user モードのためのシングルユーザが定義されていません。"
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6017,7 +6015,7 @@ msgstr "すでにフォローしています!"
 
 #: lib/subs.php:56
 msgid "User has blocked you."
-msgstr "利用者はあなたをブロックしました。"
+msgstr "ユーザはあなたをブロックしました。"
 
 #: lib/subs.php:63
 msgid "Could not subscribe."
@@ -6108,49 +6106,49 @@ msgstr "メッセージ"
 #: lib/userprofile.php:311
 #, fuzzy
 msgid "Moderate"
-msgstr "司会"
+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 年前"
 
index 3c85974bc1d54178c0c5c5d3a9b866b3f304f99e..7be2acfca1ff925166794f631a10eef8cebd11b8 100644 (file)
@@ -7,12 +7,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:32+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 (r61864); 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"
@@ -179,22 +179,23 @@ msgstr "%1$s 및 %2$s에 있는 친구들의 업데이트!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 메서드를 찾을 수 없습니다."
@@ -572,7 +573,8 @@ msgstr "계정"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "별명"
@@ -765,7 +767,7 @@ msgstr "원래 설정"
 msgid "Preview"
 msgstr "미리보기"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "삭제"
@@ -832,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 "이 사용자 차단하기"
 
@@ -1478,7 +1480,7 @@ msgstr "이 게시글은 이미 좋아하는 게시글입니다."
 msgid "Disfavor favorite"
 msgstr "좋아하는글 취소"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "인기있는 게시글"
@@ -1633,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 "사용자를 차단합니다."
@@ -1738,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 ""
 
@@ -2144,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 "관리자만 그룹을 편집할 수 있습니다."
@@ -2363,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 "지원하는 형식의 데이터가 아닙니다."
 
@@ -2757,7 +2759,7 @@ msgstr "자기소개"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "위치"
@@ -2935,7 +2937,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "태그 클라우드"
 
@@ -3376,79 +3378,84 @@ msgstr "아바타 설정"
 msgid "You must be logged in to view an application."
 msgstr "그룹을 떠나기 위해서는 로그인해야 합니다."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "통지에 프로필이 없습니다."
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "별명"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "페이지수"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "설명"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "통계"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "정말로 통지를 삭제하시겠습니까?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3513,12 +3520,12 @@ msgid "Group profile"
 msgstr "그룹 프로필"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "설명"
 
@@ -4081,7 +4088,8 @@ msgstr "태그 %s"
 msgid "User profile"
 msgstr "이용자 프로필"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "사진"
 
@@ -4142,7 +4150,7 @@ msgstr "요청한 프로필id가 없습니다."
 msgid "Unsubscribed"
 msgstr "구독취소 되었습니다."
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4234,38 +4242,38 @@ msgstr ""
 "사용자의 통지를 구독하려면 상세를 확인해 주세요. 구독하지 않는 경우는, \"취소"
 "\"를 클릭해 주세요."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 #, fuzzy
 msgid "License"
 msgstr "라이선스"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "수락"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "이 회원을 구독합니다."
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "거부"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "%s 구독"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "허용되지 않는 요청입니다."
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "구독 허가"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4275,11 +4283,11 @@ msgstr ""
 "구독이 승인 되었습니다. 하지만 콜백 URL이 통과 되지 않았습니다. 웹사이트의 지"
 "시를 찾아 구독 승인 방법에 대하여 읽어보십시오. 귀하의 구독 토큰은 : "
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "구독 거부"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4289,37 +4297,37 @@ msgstr ""
 "구독이 해지 되었습니다. 하지만 콜백 URL이 통과 되지 않았습니다. 웹사이트의 지"
 "시를 찾아 구독 해지 방법에 대하여 읽어보십시오."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "아바타 URL '%s'을(를) 읽어낼 수 없습니다."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "%S 잘못된 그림 파일 타입입니다. "
@@ -4509,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)"
@@ -4804,11 +4812,11 @@ msgstr "SMS 인증"
 msgid "Sessions configuration"
 msgstr "SMS 인증"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5813,12 +5821,12 @@ msgstr "리모트 프로필 추가 오류"
 msgid "Duplicate notice"
 msgstr "통지 삭제"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "이 회원은 구독으로부터 당신을 차단해왔다."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "예약 구독을 추가 할 수 없습니다."
 
@@ -6109,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년 전"
 
index 87e375047557044f293e83738de16a481cb15f20..92209e72ea0a45772c5e0db955cfea57bfd2118e 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21: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 (r61864); 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"
@@ -183,22 +183,23 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 методот не е пронајден."
 
@@ -483,12 +484,11 @@ msgstr "групи на %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Нема наведено oauth_token параметар."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Ð\9fогÑ\80еÑ\88на Ð³Ð¾Ð»ÐµÐ¼Ð¸Ð½Ð°."
+msgstr "Ð\9fогÑ\80еÑ\88ен Ð¶ÐµÑ\82он."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -530,9 +530,9 @@ msgid ""
 msgstr "Жетонот на барањето %s е одобрен. Заменете го со жетон за пристап."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "Жетонот на барањето %s е одбиен."
+msgstr "Жетонот на барањето %s е одбиен и поништен."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -558,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 ""
+"Програмот <strong>%1$s</strong> од <strong>%2$s</strong> би сакал да може да "
+"<strong>%3$s</strong> податоците за Вашата %4$s сметка. Треба да дозволувате "
+"пристап до Вашата %4$s сметка само на трети страни на кои им верувате."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -565,7 +568,8 @@ msgstr "Сметка"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Прекар"
@@ -756,7 +760,7 @@ msgstr "Оригинал"
 msgid "Preview"
 msgstr "Преглед"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Бриши"
@@ -824,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 "Блокирај го корисников"
 
@@ -925,14 +929,12 @@ msgid "Notices"
 msgstr "Забелешки"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Мора да сте најавени за да можете да уредувате програми."
+msgstr "Мора да сте најавени за да можете да избришете програм."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Ð\98нÑ\84о Ð·Ð° Ð¿Ñ\80огÑ\80амоÑ\82"
+msgstr "Ð\9fÑ\80огÑ\80амоÑ\82 Ð½Ðµ Ðµ Ð¿Ñ\80онаÑ\98ден."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -946,29 +948,26 @@ msgid "There was a problem with your session token."
 msgstr "Се појави проблем со Вашиот сесиски жетон."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "УÑ\80еди програм"
+msgstr "Ð\98збÑ\80иÑ\88и програм"
 
 #: 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 ""
-"Дали се сигурни дека сакате да го избришете овој корисник? Ова воедно ќе ги "
-"избрише сите податоци за корисникот од базата, без да може да се вратат."
+"Дали се сигурни дека сакате да го избришете овој програм? Ова воедно ќе ги "
+"избрише сите податоци за програмот од базата, вклучувајќи ги сите постоечки "
+"поврзувања."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Не ја бриши оваа забелешка"
+msgstr "Не го бриши овој програм"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Ð\98кона Ð·Ð° Ð¾Ð²Ð¾Ñ\98 Ð¿Ñ\80огÑ\80ам"
+msgstr "Ð\98збÑ\80иÑ\88и Ð³Ð¾ Ð¿Ñ\80огÑ\80амов"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1179,9 +1178,8 @@ msgid "Name is too long (max 255 chars)."
 msgstr "Името е предолго (максимум 255 знаци)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "Тој прекар е во употреба. Одберете друг."
+msgstr "Тоа име е во употреба. Одберете друго."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
@@ -1445,7 +1443,7 @@ msgstr "Оваа белешка е веќе омилена!"
 msgid "Disfavor favorite"
 msgstr "Тргни од омилени"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Популарни забелешки"
@@ -1593,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 "Блокирај корисник од група"
 
@@ -1697,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 "Направи го корисникот администратор"
 
@@ -2095,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?"
@@ -2118,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."
@@ -2336,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 "Ова не е поддржан формат на податотека."
 
@@ -2715,7 +2714,7 @@ msgstr "Биографија"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Локација"
@@ -2904,7 +2903,7 @@ msgstr ""
 "Зошто не [регистрирате сметка](%%action.register%%) и станете прв што ќе "
 "објави!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Облак од ознаки"
 
@@ -3347,71 +3346,71 @@ msgstr "Зачувај нагодувања на веб-страницата"
 msgid "You must be logged in to view an application."
 msgstr "Мора да сте најавени за да можете да го видите програмот."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Профил на програмот"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Икона"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Име"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Организација"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Опис"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Статистики"
 
-#: actions/showapplication.php:204
-#, fuzzy, php-format
+#: actions/showapplication.php:203
+#, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "создал: %1$s - основен пристап: %2$s - %3$d корисници"
+msgstr "Создадено од %1$s - основен пристап: %2$s - %3$d корисници"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "Дејства на програмот"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Клуч за промена и тајна"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "Инфо за програмот"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr "Потрошувачки клуч"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr "Потрошувачка тајна"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "URL на жетонот на барањето"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "URL на пристапниот жетон"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "Одобри URL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3419,6 +3418,12 @@ msgstr ""
 "Напомена: Поддржуваме HMAC-SHA1 потписи. Не поддржуваме потпишување со прост "
 "текст."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Дали сте сигурни дека сакате да го смените вашиот кориснички клуч и тајната "
+"фраза?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3491,12 +3496,12 @@ msgid "Group profile"
 msgstr "Профил на група"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Забелешка"
 
@@ -4079,7 +4084,8 @@ msgstr "Означи %s"
 msgid "User profile"
 msgstr "Кориснички профил"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Фото"
 
@@ -4138,7 +4144,7 @@ msgstr "Во барањето нема id на профилот."
 msgid "Unsubscribed"
 msgstr "Претплатата е откажана"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4227,36 +4233,36 @@ msgstr ""
 "за забелешките на овој корисник. Ако не сакате да се претплатите, едноставно "
 "кликнете на „Одбиј“"
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Лиценца"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Прифати"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Претплати се на корисников"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Одбиј"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Одбиј ја оваа претплата"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Нема барање за проверка!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Претплатата е одобрена"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4266,11 +4272,11 @@ msgstr ""
 "инструкциите на веб-страницата за да дознаете како се одобрува претплата. "
 "Жетонот на Вашата претплата е:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Претплатата е одбиена"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4280,37 +4286,37 @@ msgstr ""
 "инструкциите на веб-страницата за да дознаете како се одбива претплата во "
 "потполност."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "URI-то на следачот „%s“ не е пронајдено тука."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "Следениот URI „%s“ е предолг."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "Следеното URI „%s“ е за локален корисник."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "Профилната URL-адреса „%s“ е за локален корисник."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "URL-адресата „%s“ за аватар е неважечка."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Не можам да ја прочитам URL на аватарот „%s“."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Погрешен тип на слика за URL на аватарот „%s“."
@@ -4509,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"
@@ -4792,13 +4798,13 @@ msgstr "Конфигурација на патеки"
 msgid "Sessions configuration"
 msgstr "Конфигурација на сесиите"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 "API-ресурсот бара да може и да чита и да запишува, а вие можете само да "
 "читате."
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr "Неуспешен обид за API-заверка, прекар = %1$s, прокси = %2$s, IP = %3$s"
@@ -5246,8 +5252,8 @@ msgstr "Подигни податотека"
 msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
 msgstr ""
-"Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð½ÐµÑ\82е Ð»Ð¸Ñ\87наÑ\82а Ð¿Ð¾Ð·Ð°Ð´Ð¸Ð½Ñ\81ка Ñ\81лика. Ð\9cакÑ\81ималнаÑ\82а Ð´Ð¾Ð·Ð²Ð¾Ð»Ðµна "
-"големина Ð¸Ð·Ð½ÐµÑ\81Ñ\83ва 2Ð\9cÐ\91."
+"Ð\9cожеÑ\82е Ð´Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð½ÐµÑ\82е Ð»Ð¸Ñ\87на Ð¿Ð¾Ð·Ð°Ð´Ð¸Ð½Ñ\81ка Ñ\81лика. Ð\9cакÑ\81ималнаÑ\82а Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð° Ð³Ð¾Ð»ÐµÐ¼Ð¸на "
+"изнесува 2МБ."
 
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
@@ -5909,11 +5915,11 @@ msgstr "Грешка во внесувањето на оддалечениот 
 msgid "Duplicate notice"
 msgstr "Дуплирај забелешка"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Блокирани сте од претплаќање."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Не може да се внесе нова претплата."
 
@@ -6020,7 +6026,7 @@ msgstr "Повтори ја забелешкава"
 
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Не е зададен корисник за еднокорисничкиот режим."
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6188,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 "пред една година"
 
index 13d763b26f44e91a7df58d1a8722c09a8f433de2..ab74ad1dce5ad6a01cce9a41fe2a89ca6495502a 100644 (file)
@@ -8,55 +8,52 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21: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 (r61864); 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"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
-#, fuzzy
 msgid "Access"
-msgstr "Godta"
+msgstr "Tilgang"
 
 #: actions/accessadminpanel.php:65
-#, fuzzy
 msgid "Site access settings"
-msgstr "Innstillinger for IM"
+msgstr "Innstillinger for nettstedstilgang"
 
 #: actions/accessadminpanel.php:158
-#, fuzzy
 msgid "Registration"
-msgstr "Alle abonnementer"
+msgstr "Registrering"
 
 #: actions/accessadminpanel.php:161
 msgid "Private"
-msgstr ""
+msgstr "Privat"
 
 #: actions/accessadminpanel.php:163
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
+msgstr "Forhindre anonyme brukere (ikke innlogget) å se nettsted?"
 
 #: actions/accessadminpanel.php:167
 msgid "Invite only"
-msgstr ""
+msgstr "Kun invitasjon"
 
 #: actions/accessadminpanel.php:169
 msgid "Make registration invitation only."
-msgstr ""
+msgstr "Gjør at registrering kun kan skje gjennom invitasjon."
 
 #: actions/accessadminpanel.php:173
 msgid "Closed"
-msgstr ""
+msgstr "Lukket"
 
 #: actions/accessadminpanel.php:175
 msgid "Disable new registrations."
-msgstr ""
+msgstr "Deaktiver nye registreringer."
 
 #: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
 #: actions/emailsettings.php:195 actions/imsettings.php:163
@@ -71,9 +68,8 @@ msgid "Save"
 msgstr "Lagre"
 
 #: actions/accessadminpanel.php:189
-#, fuzzy
 msgid "Save access settings"
-msgstr "Innstillinger for IM"
+msgstr "Lagre tilgangsinnstillinger"
 
 #: actions/all.php:63 actions/public.php:97 actions/replies.php:92
 #: actions/showfavorites.php:137 actions/tag.php:51
@@ -107,9 +103,9 @@ msgid "No such user."
 msgstr "Ingen slik bruker"
 
 #: actions/all.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s and friends, page %2$d"
-msgstr "%s og venner"
+msgstr "%1$s og venner, side %2$d"
 
 #: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
 #: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
@@ -149,14 +145,14 @@ msgstr ""
 "eller post noe selv."
 
 #: actions/all.php:134
-#, fuzzy, php-format
+#, php-format
 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 ""
-"Du kan prøve å [knuffe %s](../%s) fra dennes profil eller [post noe for å få "
-"hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?status_textarea=%"
-"s)."
+"Du kan prøve å [knuffe %1$s](../%2$s) fra dennes profil eller [poste noe for "
+"å få hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?"
+"status_textarea=%3$s)."
 
 #: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
 #, php-format
@@ -182,22 +178,23 @@ msgstr "Oppdateringer fra %1$s og venner på %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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!"
@@ -326,18 +323,16 @@ msgid "No status found with that ID."
 msgstr "Fant ingen status med den ID-en."
 
 #: actions/apifavoritecreate.php:119
-#, fuzzy
 msgid "This status is already a favorite."
-msgstr "Denne statusen er allerede en favoritt!"
+msgstr "Denne statusen er allerede en favoritt."
 
 #: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
 msgid "Could not create favorite."
 msgstr "Kunne ikke opprette favoritt."
 
 #: actions/apifavoritedestroy.php:122
-#, fuzzy
 msgid "That status is not a favorite."
-msgstr "Den statusen er ikke en favoritt!"
+msgstr "Den statusen er ikke en favoritt."
 
 #: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
 msgid "Could not delete favorite."
@@ -357,23 +352,20 @@ msgid "Could not unfollow user: User not found."
 msgstr "Kunne ikke slutte å følge brukeren: Fant ikke brukeren."
 
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "Du kan ikke slutte å følge deg selv!"
+msgstr "Du kan ikke slutte å følge deg selv."
 
 #: actions/apifriendshipsexists.php:94
 msgid "Two user ids or screen_names must be supplied."
 msgstr "To bruker ID-er eller kallenavn må oppgis."
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke bestemme kildebruker."
 
 #: actions/apifriendshipsshow.php:142
-#, fuzzy
 msgid "Could not find target user."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke finne målbruker."
 
 #: actions/apigroupcreate.php:164 actions/editgroup.php:182
 #: actions/newgroup.php:126 actions/profilesettings.php:215
@@ -422,31 +414,30 @@ msgstr ""
 #: actions/newgroup.php:159
 #, php-format
 msgid "Too many aliases! Maximum %d."
-msgstr ""
+msgstr "For mange alias! Maksimum %d."
 
 #: actions/apigroupcreate.php:264 actions/editgroup.php:224
 #: actions/newgroup.php:168
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\""
-msgstr "Ugyldig hjemmeside '%s'"
+msgstr "Ugyldig alias: «%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 "Det nicket er allerede i bruk. Prøv et annet."
+msgstr "Aliaset «%s» er allerede i bruk. Prøv et annet."
 
 #: actions/apigroupcreate.php:286 actions/editgroup.php:234
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
-msgstr ""
+msgstr "Alias kan ikke være det samme som kallenavn."
 
 #: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
 #: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
 #: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
-#, fuzzy
 msgid "Group not found!"
-msgstr "API-metode ikke funnet!"
+msgstr "Gruppe ikke funnet!"
 
 #: actions/apigroupjoin.php:110 actions/joingroup.php:90
 msgid "You are already a member of that group."
@@ -454,22 +445,21 @@ msgstr "Du er allerede medlem av den gruppen."
 
 #: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
 msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "Du har blitt blokkert fra den gruppen av administratoren."
 
 #: 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 "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke legge bruker %1$s til gruppe %2$s."
 
 #: actions/apigroupleave.php:114
-#, fuzzy
 msgid "You are not a member of this group."
-msgstr "Du er allerede logget inn!"
+msgstr "Du er ikke et medlem av denne gruppen."
 
 #: 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 "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke fjerne bruker %1$s fra gruppe %2$s."
 
 #: actions/apigrouplist.php:95
 #, php-format
@@ -479,16 +469,16 @@ msgstr "%s sine grupper"
 #: actions/apigrouplistall.php:90 actions/usergroups.php:62
 #, php-format
 msgid "%s groups"
-msgstr ""
+msgstr "%s grupper"
 
 #: actions/apigrouplistall.php:94
 #, php-format
 msgid "groups on %s"
-msgstr ""
+msgstr "grupper på %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Ingen verdi for oauth_token er oppgitt."
 
 #: actions/apioauthauthorize.php:106
 #, fuzzy
@@ -514,9 +504,8 @@ msgid "There was a problem with your session token. Try again, please."
 msgstr ""
 
 #: actions/apioauthauthorize.php:135
-#, fuzzy
 msgid "Invalid nickname / password!"
-msgstr "Ugyldig brukernavn eller passord"
+msgstr "Ugyldig kallenavn / passord!"
 
 #: actions/apioauthauthorize.php:159
 msgid "Database error deleting OAuth application user."
@@ -553,7 +542,7 @@ msgstr ""
 
 #: actions/apioauthauthorize.php:276
 msgid "Allow or deny access"
-msgstr ""
+msgstr "Tillat eller nekt tilgang"
 
 #: actions/apioauthauthorize.php:292
 #, php-format
@@ -564,13 +553,13 @@ msgid ""
 msgstr ""
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
-#, fuzzy
 msgid "Account"
-msgstr "Om"
+msgstr "Konto"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Nick"
@@ -582,15 +571,15 @@ msgstr "Passord"
 
 #: actions/apioauthauthorize.php:328
 msgid "Deny"
-msgstr ""
+msgstr "Nekt"
 
 #: actions/apioauthauthorize.php:334
 msgid "Allow"
-msgstr ""
+msgstr "Tillat"
 
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Tillat eller nekt tilgang til din kontoinformasjon."
 
 #: actions/apistatusesdestroy.php:107
 msgid "This method requires a POST or DELETE."
@@ -598,30 +587,28 @@ msgstr ""
 
 #: actions/apistatusesdestroy.php:130
 msgid "You may not delete another user's status."
-msgstr ""
+msgstr "Du kan ikke slette statusen til en annen bruker."
 
 #: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
 #: actions/deletenotice.php:52 actions/shownotice.php:92
 msgid "No such notice."
-msgstr ""
+msgstr "Ingen slik notis."
 
 #: actions/apistatusesretweet.php:83
-#, fuzzy
 msgid "Cannot repeat your own notice."
-msgstr "Kan ikke slette notisen."
+msgstr "Kan ikke gjenta din egen notis."
 
 #: actions/apistatusesretweet.php:91
-#, fuzzy
 msgid "Already repeated that notice."
-msgstr "Kan ikke slette notisen."
+msgstr "Allerede gjentatt den notisen."
 
 #: actions/apistatusesshow.php:138
 msgid "Status deleted."
-msgstr ""
+msgstr "Status slettet."
 
 #: actions/apistatusesshow.php:144
 msgid "No status with that ID found."
-msgstr ""
+msgstr "Ingen status med den ID-en funnet."
 
 #: actions/apistatusesupdate.php:161 actions/newnotice.php:155
 #: lib/mailhandler.php:60
@@ -631,7 +618,7 @@ msgstr ""
 
 #: actions/apistatusesupdate.php:202
 msgid "Not found"
-msgstr ""
+msgstr "Ikke funnet"
 
 #: actions/apistatusesupdate.php:225 actions/newnotice.php:178
 #, php-format
@@ -643,14 +630,14 @@ msgid "Unsupported format."
 msgstr ""
 
 #: actions/apitimelinefavorites.php:108
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "%1$s / Oppdateringer som svarer til %2$s"
+msgstr "%1$s / Favoritter fra %2$s"
 
 #: actions/apitimelinefavorites.php:120
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%1$s oppdateringer som svarer på oppdateringer fra %2$s / %3$s."
+msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s."
 
 #: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
 #: actions/grouprss.php:131 actions/userrss.php:90
@@ -662,12 +649,12 @@ msgstr "%s tidslinje"
 #: actions/userrss.php:92
 #, php-format
 msgid "Updates from %1$s on %2$s!"
-msgstr ""
+msgstr "Oppdateringar fra %1$s på %2$s!"
 
 #: actions/apitimelinementions.php:117
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Oppdateringer som svarer til %2$s"
+msgstr "%1$s / Oppdateringer som nevner %2$s"
 
 #: actions/apitimelinementions.php:127
 #, php-format
@@ -685,9 +672,9 @@ msgid "%s updates from everyone!"
 msgstr "%s oppdateringer fra alle sammen!"
 
 #: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
 msgid "Repeated to %s"
-msgstr "Svar til %s"
+msgstr "Gjentatt til %s"
 
 #: actions/apitimelineretweetsofme.php:112
 #, fuzzy, php-format
@@ -697,21 +684,20 @@ msgstr "Svar til %s"
 #: actions/apitimelinetag.php:102 actions/tag.php:66
 #, php-format
 msgid "Notices tagged with %s"
-msgstr ""
+msgstr "Notiser merket med %s"
 
 #: actions/apitimelinetag.php:108 actions/tagrss.php:64
-#, fuzzy, php-format
+#, php-format
 msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Mikroblogg av %s"
+msgstr "Oppdateringer merket med %1$s på %2$s!"
 
 #: actions/apiusershow.php:96
-#, fuzzy
 msgid "Not found."
-msgstr "Ingen id."
+msgstr "Ikke funnet."
 
 #: actions/attachment.php:73
 msgid "No such attachment."
-msgstr ""
+msgstr "Ingen slike vedlegg."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -719,11 +705,11 @@ msgstr ""
 #: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
 #: actions/showgroup.php:121
 msgid "No nickname."
-msgstr ""
+msgstr "Ingen kallenavn."
 
 #: actions/avatarbynickname.php:64
 msgid "No size."
-msgstr ""
+msgstr "Ingen størrelse."
 
 #: actions/avatarbynickname.php:69
 msgid "Invalid size."
@@ -754,18 +740,17 @@ msgstr "Innstillinger for IM"
 #: actions/avatarsettings.php:127 actions/avatarsettings.php:205
 #: actions/grouplogo.php:199 actions/grouplogo.php:259
 msgid "Original"
-msgstr ""
+msgstr "Original"
 
 #: actions/avatarsettings.php:142 actions/avatarsettings.php:217
 #: actions/grouplogo.php:210 actions/grouplogo.php:271
 msgid "Preview"
-msgstr ""
+msgstr "Forhåndsvis"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
-#, fuzzy
 msgid "Delete"
-msgstr "slett"
+msgstr "Slett"
 
 #: actions/avatarsettings.php:166 actions/grouplogo.php:233
 msgid "Upload"
@@ -773,7 +758,7 @@ msgstr "Last opp"
 
 #: actions/avatarsettings.php:231 actions/grouplogo.php:286
 msgid "Crop"
-msgstr ""
+msgstr "Beskjær"
 
 #: actions/avatarsettings.php:328
 msgid "Pick a square area of the image to be your avatar"
@@ -797,13 +782,12 @@ msgid "Avatar deleted."
 msgstr "Brukerbildet har blitt oppdatert."
 
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "Du er allerede logget inn!"
+msgstr "Du har allerede blokkert den brukeren."
 
 #: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
 msgid "Block user"
-msgstr ""
+msgstr "Blokker brukeren"
 
 #: actions/block.php:130
 msgid ""
@@ -816,12 +800,11 @@ msgstr ""
 #: actions/deletenotice.php:145 actions/deleteuser.php:147
 #: actions/groupblock.php:178
 msgid "No"
-msgstr ""
+msgstr "Nei"
 
 #: actions/block.php:143 actions/deleteuser.php:147
-#, fuzzy
 msgid "Do not block this user"
-msgstr "Kan ikke slette notisen."
+msgstr "Ikke blokker denne brukeren"
 
 #: actions/block.php:144 actions/deleteapplication.php:158
 #: actions/deletenotice.php:146 actions/deleteuser.php:148
@@ -829,9 +812,9 @@ msgstr "Kan ikke slette notisen."
 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 ""
+msgstr "Blokker denne brukeren"
 
 #: actions/block.php:167
 msgid "Failed to save block information."
@@ -844,19 +827,18 @@ msgstr ""
 #: actions/grouprss.php:98 actions/groupunblock.php:86
 #: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
 #: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
-#, fuzzy
 msgid "No such group."
-msgstr "Klarte ikke å lagre profil."
+msgstr "Ingen slik gruppe."
 
 #: actions/blockedfromgroup.php:90
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked profiles"
-msgstr "Klarte ikke å lagre profil."
+msgstr "%s blokkerte profiler"
 
 #: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s og venner"
+msgstr "%1$s blokkerte profiler, side %2$d"
 
 #: actions/blockedfromgroup.php:108
 msgid "A list of the users blocked from joining this group."
@@ -913,7 +895,6 @@ msgid "Couldn't delete email confirmation."
 msgstr ""
 
 #: actions/confirmaddress.php:144
-#, fuzzy
 msgid "Confirm address"
 msgstr "Bekreft adresse"
 
@@ -923,9 +904,8 @@ msgid "The address \"%s\" has been confirmed for your account."
 msgstr ""
 
 #: actions/conversation.php:99
-#, fuzzy
 msgid "Conversation"
-msgstr "Bekreftelseskode"
+msgstr "Samtale"
 
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:216 lib/searchgroupnav.php:82
@@ -998,35 +978,31 @@ msgstr ""
 
 #: actions/deletenotice.php:109 actions/deletenotice.php:141
 msgid "Delete notice"
-msgstr ""
+msgstr "Slett notis"
 
 #: actions/deletenotice.php:144
 msgid "Are you sure you want to delete this notice?"
 msgstr "Er du sikker på at du vil slette denne notisen?"
 
 #: actions/deletenotice.php:145
-#, fuzzy
 msgid "Do not delete this notice"
-msgstr "Kan ikke slette notisen."
+msgstr "Ikke slett denne notisen"
 
 #: actions/deletenotice.php:146 lib/noticelist.php:624
 msgid "Delete this notice"
-msgstr ""
+msgstr "Slett denne notisen"
 
 #: actions/deleteuser.php:67
-#, fuzzy
 msgid "You cannot delete users."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Du kan ikke slette brukere."
 
 #: actions/deleteuser.php:74
-#, fuzzy
 msgid "You can only delete local users."
-msgstr "Ugyldig OpenID"
+msgstr "Du kan bare slette lokale brukere."
 
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
 msgid "Delete user"
-msgstr "slett"
+msgstr "Slett bruker"
 
 #: actions/deleteuser.php:135
 msgid ""
@@ -1035,9 +1011,8 @@ msgid ""
 msgstr ""
 
 #: actions/deleteuser.php:148 lib/deleteuserform.php:77
-#, fuzzy
 msgid "Delete this user"
-msgstr "Kan ikke slette notisen."
+msgstr "Slett denne brukeren"
 
 #: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
 #: lib/adminpanelaction.php:316 lib/groupnav.php:119
@@ -1059,13 +1034,12 @@ msgid "Theme not available: %s"
 msgstr ""
 
 #: actions/designadminpanel.php:375
-#, fuzzy
 msgid "Change logo"
-msgstr "Endre passordet ditt"
+msgstr "Endre logo"
 
 #: actions/designadminpanel.php:380
 msgid "Site logo"
-msgstr ""
+msgstr "Nettstedslogo"
 
 #: actions/designadminpanel.php:387
 #, fuzzy
@@ -1083,12 +1057,12 @@ msgstr ""
 
 #: actions/designadminpanel.php:417 lib/designsettings.php:101
 msgid "Change background image"
-msgstr ""
+msgstr "Endre bakgrunnsbilde"
 
 #: actions/designadminpanel.php:422 actions/designadminpanel.php:497
 #: lib/designsettings.php:178
 msgid "Background"
-msgstr ""
+msgstr "Bakgrunn"
 
 #: actions/designadminpanel.php:427
 #, php-format
@@ -1118,9 +1092,8 @@ msgid "Change colours"
 msgstr "Endre farger"
 
 #: actions/designadminpanel.php:510 lib/designsettings.php:191
-#, fuzzy
 msgid "Content"
-msgstr "Koble til"
+msgstr "Innhold"
 
 #: actions/designadminpanel.php:523 lib/designsettings.php:204
 #, fuzzy
@@ -1137,7 +1110,7 @@ msgstr "Lenker"
 
 #: actions/designadminpanel.php:577 lib/designsettings.php:247
 msgid "Use defaults"
-msgstr ""
+msgstr "Bruk standard"
 
 #: actions/designadminpanel.php:578 lib/designsettings.php:248
 msgid "Restore default designs"
@@ -1157,7 +1130,7 @@ msgstr ""
 
 #: actions/disfavor.php:94
 msgid "Add to favorites"
-msgstr ""
+msgstr "Legg til i favoritter"
 
 #: actions/doc.php:158
 #, php-format
@@ -1186,40 +1159,35 @@ msgstr ""
 
 #: actions/editapplication.php:177 actions/newapplication.php:159
 msgid "Name is required."
-msgstr ""
+msgstr "Navn kreves."
 
 #: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
 msgid "Name is too long (max 255 chars)."
-msgstr "Beklager, navnet er for langt (max 250 tegn)."
+msgstr "Navn er for langt (maks 250 tegn)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "Det nicket er allerede i bruk. Prøv et annet."
+msgstr "Navn allerede i bruk. Prøv et annet."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "Alle abonnementer"
+msgstr "Beskrivelse kreves."
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
-msgstr ""
+msgstr "Kilde-URL er for lang."
 
 #: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
 msgid "Source URL is not valid."
-msgstr "Hjemmesiden er ikke en gyldig URL."
+msgstr "Kilde-URL er ikke gyldig."
 
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
-msgstr ""
+msgstr "Organisasjon kreves."
 
 #: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
 msgid "Organization is too long (max 255 chars)."
-msgstr "Beskrivelsen er for lang (maks %d tegn)."
+msgstr "Organisasjon er for lang (maks 255 tegn)."
 
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
@@ -1245,7 +1213,7 @@ msgstr ""
 
 #: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
 msgid "You must be logged in to create a group."
-msgstr ""
+msgstr "Du må være innlogget for å opprette en gruppe."
 
 #: actions/editgroup.php:103 actions/editgroup.php:168
 #: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
@@ -1258,19 +1226,17 @@ msgid "Use this form to edit the group."
 msgstr ""
 
 #: actions/editgroup.php:201 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "Bioen er for lang (max 140 tegn)"
+msgstr "beskrivelse er for lang (maks %d tegn)"
 
 #: actions/editgroup.php:253
-#, fuzzy
 msgid "Could not update group."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke oppdatere gruppe."
 
 #: actions/editgroup.php:259 classes/User_group.php:390
-#, fuzzy
 msgid "Could not create aliases."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke opprette alias."
 
 #: actions/editgroup.php:269
 msgid "Options saved."
@@ -1316,13 +1282,12 @@ msgid "Cancel"
 msgstr "Avbryt"
 
 #: actions/emailsettings.php:121
-#, fuzzy
 msgid "Email address"
 msgstr "E-postadresse"
 
 #: actions/emailsettings.php:123
 msgid "Email address, like \"UserName@example.org\""
-msgstr ""
+msgstr "E-postadresse («brukernavn@eksempel.org»)"
 
 #: actions/emailsettings.php:126 actions/imsettings.php:133
 #: actions/smssettings.php:145
@@ -1465,7 +1430,7 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr ""
@@ -1574,14 +1539,12 @@ msgid "Error updating remote profile"
 msgstr ""
 
 #: actions/getfile.php:79
-#, fuzzy
 msgid "No such file."
-msgstr "Klarte ikke å lagre profil."
+msgstr "Ingen slik fil."
 
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
-msgstr "Klarte ikke å lagre profil."
+msgstr "Kan ikke lese fil."
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1613,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 ""
 
@@ -1638,9 +1601,8 @@ msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "Ingen id."
+msgstr "Ingen ID."
 
 #: actions/groupdesignsettings.php:68
 msgid "You must be logged in to edit a group."
@@ -1668,7 +1630,7 @@ msgstr ""
 
 #: actions/grouplogo.php:139 actions/grouplogo.php:192
 msgid "Group logo"
-msgstr ""
+msgstr "Gruppelogo"
 
 #: actions/grouplogo.php:150
 #, php-format
@@ -1686,9 +1648,8 @@ msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
 #: actions/grouplogo.php:396
-#, fuzzy
 msgid "Logo updated."
-msgstr "Avataren har blitt oppdatert."
+msgstr "Logo oppdatert."
 
 #: actions/grouplogo.php:398
 msgid "Failed updating logo."
@@ -1697,7 +1658,7 @@ msgstr ""
 #: actions/groupmembers.php:93 lib/groupnav.php:92
 #, php-format
 msgid "%s group members"
-msgstr ""
+msgstr "%s gruppemedlemmer"
 
 #: actions/groupmembers.php:96
 #, php-format
@@ -1712,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"
 
@@ -1754,9 +1715,8 @@ msgid ""
 msgstr ""
 
 #: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "Opprett en ny konto"
+msgstr "Opprett en ny gruppe"
 
 #: actions/groupsearch.php:52
 #, php-format
@@ -1766,14 +1726,13 @@ msgid ""
 msgstr ""
 
 #: actions/groupsearch.php:58
-#, fuzzy
 msgid "Group search"
-msgstr "Tekst-søk"
+msgstr "Gruppesøk"
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
 msgid "No results."
-msgstr ""
+msgstr "Ingen resultat."
 
 #: actions/groupsearch.php:82
 #, php-format
@@ -1894,12 +1853,12 @@ msgstr "Det er ikke din Jabber ID."
 #: actions/inbox.php:59
 #, php-format
 msgid "Inbox for %1$s - page %2$d"
-msgstr ""
+msgstr "Innboks for %1$s - side %2$d"
 
 #: actions/inbox.php:62
 #, php-format
 msgid "Inbox for %s"
-msgstr ""
+msgstr "Innboks for %s"
 
 #: actions/inbox.php:115
 msgid "This is your inbox, which lists your incoming private messages."
@@ -1907,7 +1866,7 @@ msgstr ""
 
 #: actions/invite.php:39
 msgid "Invites have been disabled."
-msgstr ""
+msgstr "Invitasjoner har blitt deaktivert."
 
 #: actions/invite.php:41
 #, php-format
@@ -1917,15 +1876,15 @@ msgstr ""
 #: actions/invite.php:72
 #, php-format
 msgid "Invalid email address: %s"
-msgstr ""
+msgstr "Ugyldig e-postadresse: %s"
 
 #: actions/invite.php:110
 msgid "Invitation(s) sent"
-msgstr ""
+msgstr "Invitasjon(er) sendt"
 
 #: actions/invite.php:112
 msgid "Invite new users"
-msgstr ""
+msgstr "Inviter nye brukere"
 
 #: actions/invite.php:128
 msgid "You are already subscribed to these users:"
@@ -1934,7 +1893,7 @@ msgstr ""
 #: 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 ""
@@ -1958,7 +1917,7 @@ msgstr ""
 
 #: actions/invite.php:187
 msgid "Email addresses"
-msgstr ""
+msgstr "E-postadresser"
 
 #: actions/invite.php:189
 msgid "Addresses of friends to invite (one per line)"
@@ -1966,7 +1925,7 @@ msgstr "Adresser til venner som skal inviteres (én per linje)"
 
 #: actions/invite.php:192
 msgid "Personal message"
-msgstr ""
+msgstr "Personlig melding"
 
 #: actions/invite.php:194
 msgid "Optionally add a personal message to the invitation."
@@ -2035,7 +1994,7 @@ msgstr ""
 
 #: actions/joingroup.php:60
 msgid "You must be logged in to join a group."
-msgstr ""
+msgstr "Du må være innlogget for å bli med i en gruppe."
 
 #: actions/joingroup.php:131
 #, php-format
@@ -2051,9 +2010,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 "%1$s sin status på %2$s"
+msgstr "%1$s forlot gruppe %2$s"
 
 #: actions/login.php:80 actions/otp.php:62 actions/register.php:137
 msgid "Already logged in."
@@ -2103,28 +2062,28 @@ 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"
 
 #: actions/microsummary.php:69
 msgid "No current status"
-msgstr ""
+msgstr "Ingen nåværende status"
 
 #: actions/newapplication.php:52
 #, fuzzy
@@ -2246,11 +2205,11 @@ msgstr ""
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
-msgstr ""
+msgstr "Knuff sendt"
 
 #: actions/nudge.php:97
 msgid "Nudge sent!"
-msgstr ""
+msgstr "Knuff sendt!"
 
 #: actions/oauthappssettings.php:59
 msgid "You must be logged in to list your applications."
@@ -2306,14 +2265,14 @@ msgstr "%1$s sin status på %2$s"
 
 #: actions/oembed.php:157
 msgid "content type "
-msgstr ""
+msgstr "innholdstype "
 
 #: actions/oembed.php:160
 msgid "Only "
-msgstr ""
+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 ""
 
@@ -2326,9 +2285,8 @@ msgid "Notice Search"
 msgstr ""
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Innstillinger for IM"
+msgstr "Andre innstillinger"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2385,30 +2343,28 @@ msgstr ""
 #: actions/outbox.php:58
 #, php-format
 msgid "Outbox for %1$s - page %2$d"
-msgstr ""
+msgstr "Utboks for %1$s - side %2$d"
 
 #: actions/outbox.php:61
 #, php-format
 msgid "Outbox for %s"
-msgstr ""
+msgstr "Utboks for %s"
 
 #: actions/outbox.php:116
 msgid "This is your outbox, which lists private messages you have sent."
-msgstr ""
+msgstr "Dette er utboksen din som viser alle private meldinger du har sendt."
 
 #: actions/passwordsettings.php:58
 msgid "Change password"
 msgstr "Endre passord"
 
 #: actions/passwordsettings.php:69
-#, fuzzy
 msgid "Change your password."
-msgstr "Endre passord"
+msgstr "Endre passordet ditt."
 
 #: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
 msgid "Password change"
-msgstr "Passordet ble lagret"
+msgstr "Endre passord"
 
 #: actions/passwordsettings.php:104
 msgid "Old password"
@@ -2429,7 +2385,7 @@ msgstr "Bekreft"
 
 #: actions/passwordsettings.php:113 actions/recoverpassword.php:240
 msgid "Same as password above"
-msgstr ""
+msgstr "Samme som passord ovenfor"
 
 #: actions/passwordsettings.php:117
 msgid "Change"
@@ -2437,11 +2393,11 @@ msgstr "Endre"
 
 #: actions/passwordsettings.php:154 actions/register.php:230
 msgid "Password must be 6 or more characters."
-msgstr ""
+msgstr "Passord må være minst 6 tegn."
 
 #: actions/passwordsettings.php:157 actions/register.php:233
 msgid "Passwords don't match."
-msgstr ""
+msgstr "Passordene var ikke like."
 
 #: actions/passwordsettings.php:165
 msgid "Incorrect old password"
@@ -2497,9 +2453,8 @@ msgid "Site"
 msgstr ""
 
 #: actions/pathsadminpanel.php:238
-#, fuzzy
 msgid "Server"
-msgstr "Gjenopprett"
+msgstr "Tjener"
 
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
@@ -2583,24 +2538,23 @@ msgstr ""
 
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
-msgstr ""
+msgstr "SSL"
 
 #: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
-#, fuzzy
 msgid "Never"
-msgstr "Gjenopprett"
+msgstr "Aldri"
 
 #: actions/pathsadminpanel.php:324
 msgid "Sometimes"
-msgstr ""
+msgstr "Noen ganger"
 
 #: actions/pathsadminpanel.php:325
 msgid "Always"
-msgstr ""
+msgstr "Alltid"
 
 #: actions/pathsadminpanel.php:329
 msgid "Use SSL"
-msgstr ""
+msgstr "Bruk SSL"
 
 #: actions/pathsadminpanel.php:330
 msgid "When to use SSL"
@@ -2697,7 +2651,7 @@ msgstr "Om meg"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr ""
@@ -2727,7 +2681,7 @@ msgstr "Språk"
 
 #: actions/profilesettings.php:152
 msgid "Preferred language"
-msgstr ""
+msgstr "Foretrukket språk"
 
 #: actions/profilesettings.php:161
 msgid "Timezone"
@@ -2735,7 +2689,7 @@ msgstr "Tidssone"
 
 #: actions/profilesettings.php:162
 msgid "What timezone are you normally in?"
-msgstr ""
+msgstr "Hvilken tidssone er du vanligvis i?"
 
 #: actions/profilesettings.php:167
 msgid ""
@@ -2744,17 +2698,17 @@ msgstr ""
 "Abonner automatisk på de som abonnerer på meg (best for ikke-mennesker)"
 
 #: actions/profilesettings.php:228 actions/register.php:223
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "«Om meg» er for lang (maks 140 tegn)."
+msgstr "«Om meg» er for lang (maks %d tegn)."
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:150
 msgid "Timezone not selected."
-msgstr ""
+msgstr "Tidssone ikke valgt."
 
 #: actions/profilesettings.php:241
 msgid "Language is too long (max 50 chars)."
-msgstr ""
+msgstr "Språk er for langt (maks 50 tegn)."
 
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, fuzzy, php-format
@@ -2873,7 +2827,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3026,7 +2980,7 @@ msgstr ""
 
 #: actions/register.php:212
 msgid "Email address already exists."
-msgstr ""
+msgstr "E-postadressen finnes allerede."
 
 #: actions/register.php:243 actions/register.php:265
 msgid "Invalid username or password."
@@ -3049,7 +3003,7 @@ msgstr "6 eller flere tegn. Påkrevd."
 
 #: actions/register.php:434
 msgid "Same as password above. Required."
-msgstr ""
+msgstr "Samme som passord over. Kreves."
 
 #: actions/register.php:438 actions/register.php:442
 #: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
@@ -3066,23 +3020,22 @@ msgstr "Lengre navn, helst ditt \"ekte\" navn"
 
 #: actions/register.php:494
 msgid "My text and files are available under "
-msgstr ""
+msgstr "Teksten og filene mine er tilgjengelig under "
 
 #: actions/register.php:496
 msgid "Creative Commons Attribution 3.0"
-msgstr ""
+msgstr "Creative Commons Navngivelse 3.0"
 
 #: actions/register.php:497
-#, fuzzy
 msgid ""
 " except this private data: password, email address, IM address, and phone "
 "number."
 msgstr ""
-"utenom disse private dataene: passord, epost, adresse, lynmeldingsadresse og "
-"telefonnummer."
+"  utenom disse private dataene: passord, e-postadresse, lynmeldingsadresse "
+"og telefonnummer."
 
 #: 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"
@@ -3099,20 +3052,20 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Gratulerer, %s! Og velkommen til %%%%site.name%%%%. Herfra vil du "
+"Gratulerer, %1$s! Og velkommen til %%%%site.name%%%%. Herfra vil du "
 "kanskje...\n"
 "\n"
-"* Gå til [din profil](%s) og sende din første notis.\n"
-"* Legge til en [Jabber/GTalk addresse](%%%%action.imsettings%%%%) så du kan "
-"sende notiser fra lynmeldinger.\n"
-"* [Søke etter brukere](%%%%action.peoplesearch%%%%) that you may know or "
-"that share your interests. \n"
-"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
-"others more about you. \n"
-"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
-"missed. \n"
+"* Gå til [din profil](%2$s) og sende din første melding.\n"
+"* Legge til en [Jabber/GTalk-addresse](%%%%action.imsettings%%%%) så du kan "
+"sende notiser gjennom lynmeldinger.\n"
+"* [Søke etter brukere](%%%%action.peoplesearch%%%%) som du kanskje kjenner "
+"eller deler dine interesser.\n"
+"* Oppdater dine [profilinnstillinger](%%%%action.profilesettings%%%%) for å "
+"fortelle mer om deg til andre.\n"
+"* Les over [hjelpetekstene](%%%%doc.help%%%%) for funksjoner du kan ha gått "
+"glipp av.\n"
 "\n"
-"Thanks for signing up and we hope you enjoy using this service."
+"Takk for at du registrerte deg og vi håper du kommer til å like tjenesten."
 
 #: actions/register.php:562
 msgid ""
@@ -3194,14 +3147,12 @@ msgid "You already repeated that notice."
 msgstr "Du er allerede logget inn!"
 
 #: actions/repeat.php:114 lib/noticelist.php:642
-#, fuzzy
 msgid "Repeated"
-msgstr "Opprett"
+msgstr "Gjentatt"
 
 #: actions/repeat.php:119
-#, fuzzy
 msgid "Repeated!"
-msgstr "Opprett"
+msgstr "Gjentatt!"
 
 #: actions/replies.php:125 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3210,24 +3161,24 @@ msgid "Replies to %s"
 msgstr "Svar til %s"
 
 #: actions/replies.php:127
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
-msgstr "Svar til %s"
+msgstr "Svar til %1$s, side %2$d"
 
 #: actions/replies.php:144
 #, php-format
 msgid "Replies feed for %s (RSS 1.0)"
-msgstr ""
+msgstr "Svarstrøm for %s (RSS 1.0)"
 
 #: actions/replies.php:151
 #, php-format
 msgid "Replies feed for %s (RSS 2.0)"
-msgstr ""
+msgstr "Svarstrøm for %s (RSS 2.0)"
 
 #: actions/replies.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "Svar til %s"
+msgstr "Svarstrøm for %s (Atom)"
 
 #: actions/replies.php:198
 #, fuzzy, php-format
@@ -3254,14 +3205,13 @@ msgstr ""
 "s)."
 
 #: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s on %2$s!"
-msgstr "Svar til %s"
+msgstr "Svar til %1$s på %2$s!"
 
 #: actions/rsd.php:146 actions/version.php:157
-#, fuzzy
 msgid "StatusNet"
-msgstr "Statistikk"
+msgstr "StatusNet"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
 #, fuzzy
@@ -3308,79 +3258,81 @@ msgstr "Innstillinger for IM"
 msgid "You must be logged in to view an application."
 msgstr ""
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr ""
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
-msgstr ""
+msgstr "Ikon"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
-#, fuzzy
 msgid "Name"
-msgstr "Nick"
+msgstr "Navn"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
-msgstr "Bekreftelseskode"
+msgstr "Organisasjon"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
-#, fuzzy
 msgid "Description"
-msgstr "Alle abonnementer"
+msgstr "Beskrivelse"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistikk"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgstr "Opprettet av %1$s - %2$s standardtilgang - %3$d brukere"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Er du sikker på at du vil slette denne notisen?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3446,12 +3398,12 @@ msgid "Group profile"
 msgstr "Klarte ikke å lagre profil."
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr ""
 
@@ -4006,7 +3958,8 @@ msgstr "Tagger"
 msgid "User profile"
 msgstr "Klarte ikke å lagre profil."
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4064,7 +4017,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr ""
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4153,85 +4106,85 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Godta"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr ""
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr ""
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Alle abonnementer"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr ""
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Kan ikke lese brukerbilde-URL «%s»"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4412,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 ""
@@ -4694,11 +4647,11 @@ msgstr ""
 msgid "Sessions configuration"
 msgstr ""
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5706,11 +5659,11 @@ msgstr ""
 msgid "Duplicate notice"
 msgstr ""
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr ""
 
@@ -5999,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"
 
index c00e68ce618d266aba8d5698aee3f576b208c958..b1a54d06a22cf2e376e70573f9de88a4e49384d7 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:47+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 (r61864); 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"
@@ -182,22 +182,23 @@ msgstr "Updates van %1$s en vrienden op %2$s."
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -487,12 +488,11 @@ msgstr "groepen op %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Er is geen oauth_token parameter opgegeven."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Ongeldige afmetingen."
+msgstr "Ongeldig token."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -540,9 +540,9 @@ msgstr ""
 "toegangstoken."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "Het verzoektoken %s is geweigerd."
+msgstr "Het verzoektoken %s is geweigerd en ingetrokken."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -568,6 +568,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 ""
+"De <strong>applicatie %1$s</strong> van <strong>%2$s</strong> vraagt toegang "
+"van het type \"<strong>%3$s</strong> tot uw gebruikersgegevens. Geef alleen "
+"toegang tot uw gebruiker bij %4$s aan derde partijen die u vertrouwt."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -575,7 +578,8 @@ msgstr "Gebruiker"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Gebruikersnaam"
@@ -765,7 +769,7 @@ msgstr "Origineel"
 msgid "Preview"
 msgstr "Voorvertoning"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Verwijderen"
@@ -833,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"
 
@@ -934,14 +938,12 @@ msgid "Notices"
 msgstr "Mededelingen"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "U moet aangemeld zijn om een applicatie te kunnen bewerken."
+msgstr "U moet aangemeld zijn om een applicatie te kunnen verwijderen."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Applicatieinformatie"
+msgstr "De applicatie is niet gevonden."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -955,30 +957,26 @@ msgid "There was a problem with your session token."
 msgstr "Er is een probleem met uw sessietoken."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Applicatie bewerken"
+msgstr "Applicatie verwijderen"
 
 #: 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 ""
-"Weet u zeker dat u deze gebruiker wilt verwijderen? Door deze handeling "
-"worden alle gegevens van deze gebruiker uit de database verwijderd. Het is "
-"niet mogelijk ze terug te zetten."
+"Weet u zeker dat u deze applicatie wilt verwijderen? Door deze handeling "
+"worden alle gegevens van deze applicatie uit de database verwijderd, "
+"inclusief alle bestaande gebruikersverbindingen."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Deze mededeling niet verwijderen"
+msgstr "Deze applicatie niet verwijderen"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Icoon voor deze applicatie"
+msgstr "Deze applicatie verwijderen"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1190,10 +1188,8 @@ msgid "Name is too long (max 255 chars)."
 msgstr "De naam is te lang (maximaal 255 tekens)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr ""
-"De opgegeven gebruikersnaam is al in gebruik. Kies een andere gebruikersnaam."
+msgstr "Deze naam wordt al gebruikt. Kies een andere."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
@@ -1306,7 +1302,7 @@ msgstr "Annuleren"
 
 #: actions/emailsettings.php:121
 msgid "Email address"
-msgstr "E-mailadressen"
+msgstr "E-mailadres"
 
 #: actions/emailsettings.php:123
 msgid "Email address, like \"UserName@example.org\""
@@ -1456,7 +1452,7 @@ msgstr "Deze mededeling staat al in uw favorietenlijst."
 msgid "Disfavor favorite"
 msgstr "Van favotietenlijst verwijderen"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Populaire mededelingen"
@@ -1609,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"
 
@@ -1713,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"
 
@@ -2137,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."
@@ -2358,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."
 
@@ -2735,7 +2731,7 @@ msgstr "Beschrijving"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Locatie"
@@ -2927,7 +2923,7 @@ msgstr ""
 "U kunt een [gebruiker registeren](%%action.register%%) en dan de eerste zijn "
 "die er een plaatst!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Woordwolk"
 
@@ -3371,71 +3367,71 @@ msgstr "Websiteinstellingen opslaan"
 msgid "You must be logged in to view an application."
 msgstr "U moet aangemeld zijn om een applicatie te kunnen bekijken."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Applicatieprofiel"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Icoon"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Naam"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Organisatie"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Beschrijving"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistieken"
 
-#: actions/showapplication.php:204
-#, fuzzy, php-format
+#: actions/showapplication.php:203
+#, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "aangemaakt door %1$s - standaardtoegang \"%2$s\" - %3$d gebruikers"
+msgstr "Aangemaakt door %1$s - standaardtoegang \"%2$s\" - %3$d gebruikers"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "Applicatiehandelingen"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Sleutel en wachtwoord op nieuw instellen"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "Applicatieinformatie"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr "Gebruikerssleutel"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr "Gebruikerswachtwoord"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "URL voor verzoektoken"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "URL voor toegangstoken"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "Autorisatie-URL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3443,6 +3439,11 @@ msgstr ""
 "Opmerking: HMAC-SHA1 ondertekening wordt ondersteund. Ondertekening in "
 "platte tekst is niet mogelijk."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Weet u zeker dat u uw gebruikerssleutel en geheime code wilt verwijderen?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3516,12 +3517,12 @@ msgid "Group profile"
 msgstr "Groepsprofiel"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Opmerking"
 
@@ -4065,7 +4066,7 @@ msgstr ""
 #: actions/subscriptions.php:123 actions/subscriptions.php:127
 #, php-format
 msgid "%s is not listening to anyone."
-msgstr "%s luistert nergens naar."
+msgstr "%s volgt niemand."
 
 #: actions/subscriptions.php:194
 msgid "Jabber"
@@ -4108,7 +4109,8 @@ msgstr "Label %s"
 msgid "User profile"
 msgstr "Gebruikersprofiel"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Foto"
 
@@ -4169,7 +4171,7 @@ msgstr "Het profiel-ID was niet aanwezig in het verzoek."
 msgid "Unsubscribed"
 msgstr "Het abonnement is opgezegd"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4259,36 +4261,36 @@ msgstr ""
 "aangegeven dat u zich op de mededelingen van een gebruiker wilt abonneren, "
 "klik dan op \"Afwijzen\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licentie"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Aanvaarden"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
-msgstr "Abonnement geautoriseerd"
+msgstr "Abonneer mij op deze gebruiker"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Afwijzen"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Dit abonnement weigeren"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Geen autorisatieverzoek!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Het abonnement is geautoriseerd"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4298,11 +4300,11 @@ msgstr ""
 "Controleer de instructies van de site voor informatie over het volledig "
 "afwijzen van een abonnement. Uw abonnementstoken is:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Het abonnement is afgewezen"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4312,37 +4314,37 @@ msgstr ""
 "Controleer de instructies van de site voor informatie over het volledig "
 "afwijzen van een abonnement."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "De abonnee-URI \"%s\" is hier niet te vinden."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "De URI \"%s\" voor de stream is te lang."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "de URI \"%s\" voor de stream is een lokale gebruiker."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
-msgstr "De profiel-URL \"%s\" is niet geldig."
+msgstr "De profiel-URL ‘%s’ is van een lokale gebruiker."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "De avatar-URL \"%s\" is niet geldig."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Het was niet mogelijk de avatar-URL \"%s\" te lezen."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Er staat een verkeerd afbeeldingsttype op de avatar-URL \"%s\"."
@@ -4421,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
@@ -4549,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"
@@ -4832,13 +4834,13 @@ msgstr "Padinstellingen"
 msgid "Sessions configuration"
 msgstr "Sessieinstellingen"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 "Het API-programma heeft lezen-en-schrijventoegang nodig, maar u hebt alleen "
 "maar leestoegang."
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5957,11 +5959,11 @@ msgstr ""
 msgid "Duplicate notice"
 msgstr "Duplicaatmelding"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "U mag zich niet abonneren."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Kon nieuw abonnement niet toevoegen."
 
@@ -6068,7 +6070,7 @@ msgstr "Deze mededeling herhalen"
 
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Er is geen gebruiker gedefinieerd voor single-usermodus."
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6235,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"
 
index 084e2d6fe273a3f380ecefab08c8113bea0e6119..e3e2cf80ed86f95abd7cfb33462358e4c7820208 100644 (file)
@@ -7,12 +7,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:43+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 (r61864); 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"
@@ -179,22 +179,23 @@ msgstr "Oppdateringar frå %1$s og vener på %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
@@ -570,7 +571,8 @@ msgstr "Konto"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Kallenamn"
@@ -763,7 +765,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Forhandsvis"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Slett"
@@ -830,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"
 
@@ -1478,7 +1480,7 @@ msgstr "Denne notisen er alt ein favoritt!"
 msgid "Disfavor favorite"
 msgstr "Fjern favoritt"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Populære notisar"
@@ -1633,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"
@@ -1738,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 ""
 
@@ -2147,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"
@@ -2368,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."
 
@@ -2763,7 +2765,7 @@ msgstr "Om meg"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Plassering"
@@ -2944,7 +2946,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Emne sky"
 
@@ -3389,79 +3391,84 @@ msgstr "Avatar-innstillingar"
 msgid "You must be logged in to view an application."
 msgstr "Du må være innlogga for å melde deg ut av ei gruppe."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Notisen har ingen profil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Kallenamn"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Paginering"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Beskriving"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistikk"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Sikker på at du vil sletta notisen?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3526,12 +3533,12 @@ msgid "Group profile"
 msgstr "Gruppe profil"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Merknad"
 
@@ -4095,7 +4102,8 @@ msgstr "Merkelapp %s"
 msgid "User profile"
 msgstr "Brukarprofil"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Bilete"
 
@@ -4159,7 +4167,7 @@ msgstr "Ingen profil-ID i førespurnaden."
 msgid "Unsubscribed"
 msgstr "Fjerna tinging"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4252,38 +4260,38 @@ msgstr ""
 "Sjekk desse detaljane og forsikre deg om at du vil abonnere på denne "
 "brukaren sine notisar. Vist du ikkje har bedt om dette, klikk \"Avbryt\""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 #, fuzzy
 msgid "License"
 msgstr "lisens."
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Godta"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Lagre tinging for brukar: %s"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Avslå"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "%s tingarar"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Ingen autoriserings-spørjing!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Tinging autorisert"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4294,11 +4302,11 @@ msgstr ""
 "Sjekk med sida sine instruksjonar for korleis autorisering til tinginga skal "
 "gjennomførast. Ditt tingings teikn er: "
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Tinging avvist"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4308,37 +4316,37 @@ msgstr ""
 "Tingina har blitt avvist, men ingen henvisnings URL er tilgjengleg. Sjekk "
 "med sida sine instruksjonar for korleis ein skal avvise tinginga."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Kan ikkje lesa brukarbilete-URL «%s»"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Feil biletetype for '%s'"
@@ -4526,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)"
@@ -4821,11 +4829,11 @@ msgstr "SMS bekreftelse"
 msgid "Sessions configuration"
 msgstr "SMS bekreftelse"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5840,12 +5848,12 @@ msgstr "Feil med å henta inn ekstern profil"
 msgid "Duplicate notice"
 msgstr "Slett notis"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "Brukaren tillet deg ikkje å tinga meldingane sine."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Kan ikkje leggja til ny tinging."
 
@@ -6136,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"
 
index 372892a6d47322a3421de56ba95a6740a80efeec..a13f6362b4e47e358c325051555ccc6b76b641be 100644 (file)
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:50+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 (r61864); 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"
@@ -185,22 +185,23 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -484,12 +485,11 @@ msgstr "grupy na %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Nie podano parametru oauth_token."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Nieprawidłowy rozmiar."
+msgstr "Nieprawidłowy token."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -530,9 +530,9 @@ msgstr ""
 "Token żądania %s został upoważniony. Proszę wymienić go na token dostępu."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "Token żądania %s został odrzucony."
+msgstr "Token żądania %s został odrzucony lub unieważniony."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -558,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 ""
+"Aplikacja <strong>%1$s</strong> autorstwa <strong>%2$s</strong> chciałaby "
+"uzyskać możliwość <strong>%3$s</strong> danych konta %4$s. Dostęp do konta %4"
+"$s powinien być udostępniany tylko zaufanym osobom trzecim."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -565,7 +568,8 @@ msgstr "Konto"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Pseudonim"
@@ -752,7 +756,7 @@ msgstr "Oryginał"
 msgid "Preview"
 msgstr "Podgląd"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Usuń"
@@ -819,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"
 
@@ -920,14 +924,12 @@ msgid "Notices"
 msgstr "Wpisy"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Musisz być zalogowany, aby zmodyfikować aplikację."
+msgstr "Musisz być zalogowany, aby usunąć aplikację."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Informacje o aplikacji"
+msgstr "Nie odnaleziono aplikacji."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -941,29 +943,25 @@ msgid "There was a problem with your session token."
 msgstr "Wystąpił problem z tokenem sesji."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Zmodyfikuj aplikację"
+msgstr "Usuń aplikację"
 
 #: 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 ""
-"Na pewno usunąć tego użytkownika? Wyczyści to wszystkie dane o użytkowniku z "
-"bazy danych, bez utworzenia kopii zapasowej."
+"Na pewno usunąć tę aplikację? Wyczyści to wszystkie dane o aplikacji z bazy "
+"danych, w tym wszystkie istniejące połączenia użytkowników."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Nie usuwaj tego wpisu"
+msgstr "Nie usuwaj tej aplikacji"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Ikona tej aplikacji"
+msgstr "Usuń tę aplikację"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1172,9 +1170,8 @@ msgid "Name is too long (max 255 chars)."
 msgstr "Nazwa jest za długa (maksymalnie 255 znaków)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "Pseudonim jest już używany. Spróbuj innego."
+msgstr "Nazwa jest już używana. Spróbuj innej."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
@@ -1436,7 +1433,7 @@ msgstr "Ten wpis jest już ulubiony."
 msgid "Disfavor favorite"
 msgstr "Usuń wpis z ulubionych"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Popularne wpisy"
@@ -1584,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"
 
@@ -1682,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"
 
@@ -2102,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."
@@ -2317,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."
 
@@ -2694,7 +2691,7 @@ msgstr "O mnie"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Położenie"
@@ -2882,7 +2879,7 @@ msgstr ""
 "Dlaczego nie [zarejestrujesz konta](%%action.register%%) i zostaniesz "
 "pierwszym, który go wyśle."
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Chmura znaczników"
 
@@ -3322,71 +3319,71 @@ msgstr "Zapisz ustawienia witryny"
 msgid "You must be logged in to view an application."
 msgstr "Musisz być zalogowany, aby wyświetlić aplikację."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Profil aplikacji"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Ikona"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Nazwa"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Organizacja"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Opis"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statystyki"
 
-#: actions/showapplication.php:204
-#, fuzzy, php-format
+#: actions/showapplication.php:203
+#, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "utworzona przez %1$s - domyślny dostęp: %2$s - %3$d użytkowników"
+msgstr "Utworzona przez %1$s - domyślny dostęp: %2$s - %3$d użytkowników"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "Czynności aplikacji"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Przywrócenie klucza i sekretu"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "Informacje o aplikacji"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr "Klucz klienta"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr "Sekret klienta"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "Adres URL tokenu żądania"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "Adres URL tokenu żądania"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "Adres URL upoważnienia"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3394,6 +3391,10 @@ msgstr ""
 "Uwaga: obsługiwane są podpisy HMAC-SHA1. Metoda podpisu w zwykłym tekście "
 "nie jest obsługiwana."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Jesteś pewien, że chcesz przywrócić klucz i sekret klienta?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3466,12 +3467,12 @@ msgid "Group profile"
 msgstr "Profil grupy"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "Adres URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Wpis"
 
@@ -4052,7 +4053,8 @@ msgstr "Znacznik %s"
 msgid "User profile"
 msgstr "Profil użytkownika"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Zdjęcie"
 
@@ -4112,7 +4114,7 @@ msgstr "Brak identyfikatora profilu w żądaniu."
 msgid "Unsubscribed"
 msgstr "Zrezygnowano z subskrypcji"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4201,36 +4203,36 @@ msgstr ""
 "wpisy tego użytkownika. Jeżeli nie prosiłeś o subskrypcję czyichś wpisów, "
 "naciśnij \"Odrzuć\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licencja"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Zaakceptuj"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Subskrybuj tego użytkownika"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Odrzuć"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Odrzuć tę subskrypcję"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Brak żądania upoważnienia."
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Upoważniono subskrypcję"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4239,11 +4241,11 @@ msgstr ""
 "Subskrypcja została upoważniona, ale nie przekazano zwrotnego adresu URL. "
 "Sprawdź w instrukcjach witryny, jak upoważnić subskrypcję. Token subskrypcji:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Odrzucono subskrypcję"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4252,37 +4254,37 @@ msgstr ""
 "Subskrypcja została odrzucona, ale nie przekazano zwrotnego adresu URL. "
 "Sprawdź w instrukcjach witryny, jak w pełni odrzucić subskrypcję."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "Adres URI nasłuchującego \"%s\" nie został tutaj odnaleziony."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "Adres URI nasłuchującego \"%s\" jest za długi."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "Adres URI nasłuchującego \"%s\" jest lokalnym użytkownikiem."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "Adres URL profilu \"%s\" jest dla lokalnego użytkownika."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "Adres URL \"%s\" jest nieprawidłowy."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Nie można odczytać adresu URL awatara \"%s\"."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Błędny typ obrazu dla adresu URL awatara \"%s\"."
@@ -4482,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"
@@ -4765,13 +4767,13 @@ msgstr "Konfiguracja ścieżek"
 msgid "Sessions configuration"
 msgstr "Konfiguracja sesji"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 "Zasób API wymaga dostępu do zapisu i do odczytu, ale powiadasz dostęp tylko "
 "do odczytu."
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5882,11 +5884,11 @@ msgstr "Błąd podczas wprowadzania zdalnego profilu"
 msgid "Duplicate notice"
 msgstr "Duplikat wpisu"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Zablokowano subskrybowanie."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Nie można wprowadzić nowej subskrypcji."
 
@@ -5994,6 +5996,7 @@ msgstr "Powtórz ten wpis"
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
 msgstr ""
+"Nie określono pojedynczego użytkownika dla trybu pojedynczego użytkownika."
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6160,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"
 
index 96d35bf8a3de96c977e3fd096e94045fa7eb8e63..a2c8fd60cc438ffdb729c2f23fe30b101e26b6b0 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:54+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 (r61864); 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"
@@ -182,22 +182,23 @@ msgstr "Actualizações de %1$s e amigos no %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -563,7 +564,8 @@ msgstr "Conta"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Utilizador"
@@ -752,7 +754,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Antevisão"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Apagar"
@@ -819,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"
 
@@ -1455,7 +1457,7 @@ msgstr "Esta nota já é uma favorita!"
 msgid "Disfavor favorite"
 msgstr "Retirar das favoritas"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Notas populares"
@@ -1602,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"
 
@@ -1704,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"
 
@@ -2124,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."
@@ -2345,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."
 
@@ -2728,7 +2730,7 @@ msgstr "Biografia"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Localidade"
@@ -2915,7 +2917,7 @@ msgstr ""
 "Podia [registar uma conta](%%action.register%%) e ser a primeira pessoa a "
 "publicar uma!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Nuvem de categorias"
 
@@ -3360,79 +3362,84 @@ msgstr "Gravar configurações do site"
 msgid "You must be logged in to view an application."
 msgstr "Precisa de iniciar uma sessão para deixar um grupo."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Nota não tem perfil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Nome"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Paginação"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Descrição"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Estatísticas"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 #, fuzzy
 msgid "Authorize URL"
 msgstr "Autor"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Tem a certeza de que quer apagar esta nota?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3505,12 +3512,12 @@ msgid "Group profile"
 msgstr "Perfil do grupo"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Anotação"
 
@@ -4091,7 +4098,8 @@ msgstr "Categoria %s"
 msgid "User profile"
 msgstr "Perfil"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Foto"
 
@@ -4150,7 +4158,7 @@ msgstr "O pedido não tem a identificação do perfil."
 msgid "Unsubscribed"
 msgstr "Subscrição cancelada"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4239,36 +4247,36 @@ msgstr ""
 "subscrever as notas deste utilizador. Se não fez um pedido para subscrever "
 "as notas de alguém, simplesmente clique \"Rejeitar\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licença"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Aceitar"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Subscrever este utilizador"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Rejeitar"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Rejeitar esta subscrição"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Não há pedido de autorização!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Subscrição autorizada"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4278,11 +4286,11 @@ msgstr ""
 "Verifique as instruções do site para saber como autorizar a subscrição. A "
 "sua chave de subscrição é:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Subscrição rejeitada"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4292,37 +4300,37 @@ msgstr ""
 "Verifique as instruções do site para saber como rejeitar completamente a "
 "subscrição."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "A listener URI ‘%s’ não foi encontrada aqui."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "URI do escutado ‘%s’ é demasiado longo."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "URI do ouvido ‘%s’ é um utilizador local."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "A URL ‘%s’ do perfil é de um utilizador local."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "A URL ‘%s’ do avatar é inválida."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Não é possível ler a URL do avatar ‘%s’."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Tipo de imagem incorrecto para o avatar da URL ‘%s’."
@@ -4522,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"
@@ -4804,11 +4812,11 @@ msgstr "Configuração das localizações"
 msgid "Sessions configuration"
 msgstr "Configuração do estilo"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5917,11 +5925,11 @@ msgstr "Erro ao inserir perfil remoto"
 msgid "Duplicate notice"
 msgstr "Nota duplicada"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Foi bloqueado de fazer subscrições"
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Não foi possível inserir nova subscrição."
 
@@ -6195,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"
 
index 81c931c45af1062db5911fccf2ae3030b4375f78..b9ffc361b4831a0dce2731f5b9b841d3a049177f 100644 (file)
@@ -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-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:21:58+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 (r61864); 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!"
@@ -185,22 +183,23 @@ msgstr "Atualizações de %1$s e amigos no %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: 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: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!"
 
@@ -486,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
@@ -517,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
@@ -538,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
@@ -566,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"
@@ -573,7 +573,8 @@ msgstr "Conta"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Usuário"
@@ -648,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."
@@ -659,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!"
@@ -675,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!"
@@ -690,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"
@@ -700,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!"
@@ -761,7 +762,7 @@ msgstr "Original"
 msgid "Preview"
 msgstr "Visualização"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Excluir"
@@ -829,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"
 
@@ -930,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
@@ -951,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
@@ -1030,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"
@@ -1154,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"
 
@@ -1185,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."
@@ -1252,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."
 
@@ -1453,7 +1447,7 @@ msgstr "Essa mensagem já é uma favorita!"
 msgid "Disfavor favorite"
 msgstr "Desmarcar a favorita"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Mensagens populares"
@@ -1601,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"
 
@@ -1704,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"
 
@@ -1899,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
@@ -2127,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."
@@ -2153,7 +2147,6 @@ msgid "No current status"
 msgstr "Nenhuma mensagem atual"
 
 #: actions/newapplication.php:52
-#, fuzzy
 msgid "New Application"
 msgstr "Nova aplicação"
 
@@ -2349,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."
 
@@ -2415,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
@@ -2727,7 +2720,7 @@ msgstr "Descrição"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Localização"
@@ -2915,7 +2908,7 @@ msgstr ""
 "Por que você não [registra uma conta](%%action.register%%) pra ser o "
 "primeiro a publicar?"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Nuvem de etiquetas"
 
@@ -3360,71 +3353,71 @@ msgstr "Salvar as configurações do site"
 msgid "You must be logged in to view an application."
 msgstr "Você deve estar autenticado para visualizar uma aplicação."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Perfil da aplicação"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Ícone"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Nome"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Organização"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Descrição"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Estatísticas"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, fuzzy, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr "criado por %1$s - %2$s acessa por padrão - %3$d usuários"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "Ações da aplicação"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Restaurar a chave e o segredo"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "Informação da aplicação"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr "Chave do consumidor"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr "Segredo do consumidor"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "URL do token de requisição"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "URL do token de acesso"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "Autorizar a URL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3432,6 +3425,11 @@ msgstr ""
 "Nota: Nós suportamos assinaturas HMAC-SHA1. Nós não suportamos o método de "
 "assinatura em texto plano."
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Tem certeza que deseja excluir esta mensagem?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3504,12 +3502,12 @@ msgid "Group profile"
 msgstr "Perfil do grupo"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "Site"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Mensagem"
 
@@ -4090,7 +4088,8 @@ msgstr "Etiqueta %s"
 msgid "User profile"
 msgstr "Perfil do usuário"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Imagem"
 
@@ -4149,7 +4148,7 @@ msgstr "Nenhuma ID de perfil na requisição."
 msgid "Unsubscribed"
 msgstr "Cancelado"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4239,36 +4238,36 @@ msgstr ""
 "as mensagens deste usuário. Se você não solicitou assinar as mensagens de "
 "alguém, clique em \"Recusar\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licença"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Aceitar"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Assinar este usuário"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Recusar"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Recusar esta assinatura"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Nenhum pedido de autorização!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "A assinatura foi autorizada"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4278,11 +4277,11 @@ msgstr ""
 "Verifique as instruções do site para detalhes sobre como autorizar a "
 "assinatura. Seu token de assinatura é:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "A assinatura foi recusada"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4292,37 +4291,37 @@ msgstr ""
 "Verifique as instruções do site para detalhes sobre como rejeitar "
 "completamente a assinatura."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "A URI ‘%s’ do usuário não foi encontrada aqui."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "A URI ‘%s’ do usuário é muito extensa."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "A URI ‘%s’ é de um usuário local."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "A URL ‘%s’ do perfil é de um usuário local."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "A URL ‘%s’ do avatar não é válida."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Não é possível ler a URL '%s' do avatar."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Tipo de imagem errado para a URL '%s' do avatar."
@@ -4425,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
@@ -4521,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"
@@ -4531,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."
 
@@ -4805,11 +4804,11 @@ msgstr "Configuração dos caminhos"
 msgid "Sessions configuration"
 msgstr "Configuração da aparência"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5919,11 +5918,11 @@ msgstr "Erro na inserção do perfil remoto"
 msgid "Duplicate notice"
 msgstr "Duplicar a mensagem"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Você está proibido de assinar."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Não foi possível inserir a nova assinatura."
 
@@ -6197,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"
 
index a9fd1e3cfd7308245d7a3d9f5fb6bee14940fe69..da1345a0d6359f419a7d374f618bd33a61ef97f8 100644 (file)
@@ -1,6 +1,7 @@
 # Translation of StatusNet to Russian
 #
 # Author@translatewiki.net: Brion
+# Author@translatewiki.net: Kirill
 # Author@translatewiki.net: Lockal
 # Author@translatewiki.net: Rubin
 # Author@translatewiki.net: Александр Сигачёв
@@ -11,12 +12,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:02+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 (r61864); 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"
@@ -172,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!"
@@ -183,22 +184,23 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: 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:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
 msgid "API method not found."
 msgstr "Метод API не найден."
 
@@ -485,12 +487,11 @@ msgstr "группы на %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Не задан параметр oauth_token."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Ð\9dевеÑ\80нÑ\8bй Ñ\80азмеÑ\80."
+msgstr "Ð\9dепÑ\80авилÑ\8cнÑ\8bй Ñ\82окен"
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -531,9 +532,9 @@ msgstr ""
 "Ключ запроса %s авторизован. Пожалуйста, обменяйте его на ключ доступа."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "Ð\9aлÑ\8eÑ\87 Ð·Ð°Ð¿Ñ\80оÑ\81а %s Ð¾Ñ\82клонÑ\91н."
+msgstr "Ð\97апÑ\80оÑ\81 Ñ\82окена %s Ð±Ñ\8bл Ð·Ð°Ð¿Ñ\80еÑ\89ен Ð¸ Ð°Ð½Ð½Ñ\83лиÑ\80ован."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -559,6 +560,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 ""
+"Приложение <strong>%1$s</strong> от <strong>%2$s</strong> просит разрешение "
+"на<strong>%3$s</strong> данных вашей учётной записи%4$s . Вы должны "
+"предоставлять разрешение на доступ к вашей учётной записи %4$s только тем "
+"сторонним приложениям, которым вы доверяете."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -566,7 +571,8 @@ msgstr "Настройки"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Имя"
@@ -641,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."
@@ -652,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!"
@@ -668,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 от всех!"
@@ -683,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"
@@ -693,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!"
@@ -754,7 +760,7 @@ msgstr "Оригинал"
 msgid "Preview"
 msgstr "Просмотр"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Удалить"
@@ -821,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 "Заблокировать пользователя."
 
@@ -922,14 +928,12 @@ msgid "Notices"
 msgstr "Записи"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Ð\92Ñ\8b Ð´Ð¾Ð»Ð¶Ð½Ñ\8b Ð°Ð²Ñ\82оÑ\80изоваÑ\82Ñ\8cÑ\81Ñ\8f, Ñ\87Ñ\82обÑ\8b Ð¸Ð·Ð¼ÐµÐ½ить приложение."
+msgstr "Ð\92Ñ\8b Ð´Ð¾Ð»Ð¶Ð½Ñ\8b Ð²Ð¾Ð¹Ñ\82и Ð² Ñ\81иÑ\81Ñ\82емÑ\83, Ñ\87Ñ\82обÑ\8b Ñ\83далить приложение."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Ð\98нÑ\84оÑ\80маÑ\86иÑ\8f Ð¾ Ð¿Ñ\80иложении"
+msgstr "Ð\9fÑ\80иложение Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -943,29 +947,26 @@ msgid "There was a problem with your session token."
 msgstr "Проблема с Вашей сессией. Попробуйте ещё раз, пожалуйста."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Ð\98зменить приложение"
+msgstr "Удалить приложение"
 
 #: 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 ""
-"Вы действительно хотите удалить этого пользователя? Это повлечёт удаление "
-"всех данных о пользователе из базы данных без возможности восстановления."
+"Вы уверены, что хотите удалить это приложение? Это очистит все данные о "
+"применении из базы данных, включая все существующие подключения "
+"пользователей."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Не удалять эту запись"
+msgstr "Не удаляйте это приложение"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Ð\98конка Ð´Ð»Ñ\8f Ñ\8dÑ\82ого Ð¿Ñ\80иложениÑ\8f"
+msgstr "УдалиÑ\82Ñ\8c Ñ\8dÑ\82о Ð¿Ñ\80иложение"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1176,7 +1177,6 @@ msgid "Name is too long (max 255 chars)."
 msgstr "Имя слишком длинное (не больше 255 знаков)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
 msgstr "Такое имя уже используется. Попробуйте какое-нибудь другое."
 
@@ -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 "Не удаётся создать алиасы."
 
@@ -1449,7 +1449,7 @@ msgstr "Эта запись уже входит в число любимых!"
 msgid "Disfavor favorite"
 msgstr "Разлюбить"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 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 "Неподдерживаемый формат данных."
 
@@ -2710,7 +2710,7 @@ msgstr "Биография"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Месторасположение"
@@ -2896,7 +2896,7 @@ msgstr ""
 "Почему бы не [зарегистрироваться](%%action.register%%), чтобы отправить "
 "первым?"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Облако тегов"
 
@@ -3337,71 +3337,71 @@ msgstr "Сохранить настройки сайта"
 msgid "You must be logged in to view an application."
 msgstr "Вы должны авторизоваться, чтобы просматривать приложения."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Профиль приложения"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Иконка"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Имя"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Организация"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Описание"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Статистика"
 
-#: actions/showapplication.php:204
-#, fuzzy, php-format
+#: actions/showapplication.php:203
+#, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "создано %1$s — %2$s доступ по умолчанию — %3$d польз."
+msgstr "Создано %1$s — доступ по умолчанию: %2$s — %3$d польз."
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "Действия приложения"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Сбросить ключ и секретную фразу"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "Информация о приложении"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr "Потребительский ключ"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr "Секретная фраза потребителя"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "URL ключа запроса"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "URL ключа доступа"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "URL авторизации"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3409,6 +3409,11 @@ msgstr ""
 "Примечание: Мы поддерживаем подписи HMAC-SHA1. Мы не поддерживаем метод "
 "подписи открытым текстом."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Вы уверены, что хотите сбросить ваш ключ потребителя и секретную фразу?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3480,12 +3485,12 @@ msgid "Group profile"
 msgstr "Профиль группы"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Запись"
 
@@ -4071,7 +4076,8 @@ msgstr "Теги %s"
 msgid "User profile"
 msgstr "Профиль пользователя"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Фото"
 
@@ -4131,7 +4137,7 @@ msgstr "Нет ID профиля в запросе."
 msgid "Unsubscribed"
 msgstr "Отписано"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4220,36 +4226,36 @@ msgstr ""
 "подписаться на записи этого пользователя. Если Вы этого не хотите делать, "
 "нажмите «Отказ»."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Лицензия"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Принять"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Подписаться на %s"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Отбросить"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Отвергнуть эту подписку"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Не авторизованный запрос!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Подписка авторизована"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4258,11 +4264,11 @@ msgstr ""
 "Подписка авторизована, но нет обратного URL. Посмотрите инструкции на сайте "
 "о том, как авторизовать подписку. Ваш ключ подписки:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Подписка отменена"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4271,37 +4277,37 @@ msgstr ""
 "Подписка отвергнута, но не бы передан URL обратного вызова. Проверьте "
 "инструкции на сайте, чтобы полностью отказаться от подписки."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "Смотрящий URI «%s» здесь не найден."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "Просматриваемый URI «%s» слишком длинный."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "Просматриваемый URI «%s» — локальный пользователь."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "URL профиля «%s» предназначен только для локального пользователя."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "URL аватары «%s» недействителен."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Не удаётся прочитать URL аватары «%s»"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Неверный тип изображения для URL аватары «%s»."
@@ -4498,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"
@@ -4508,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 "Не удаётся назначить членство в группе."
 
@@ -4781,13 +4787,13 @@ msgstr "Конфигурация путей"
 msgid "Sessions configuration"
 msgstr "Конфигурация сессий"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 "API ресурса требует доступ для чтения и записи, но у вас есть только доступ "
 "для чтения."
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5895,11 +5901,11 @@ msgstr "Ошибка вставки удалённого профиля"
 msgid "Duplicate notice"
 msgstr "Дублировать запись"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Вы заблокированы от подписки."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Не удаётся вставить новую подписку."
 
@@ -6006,7 +6012,7 @@ msgstr "Повторить эту запись"
 
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Ни задан пользователь для однопользовательского режима."
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6173,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 "около года назад"
 
index bdd6f05cd9ea913bf60530dfc127ea9323a61921..d1ee56f2ca67e0c360e4bd55b8e83e373c7494d0 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+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 ""
@@ -169,22 +169,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: 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:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
 msgid "API method not found."
 msgstr ""
 
@@ -541,7 +542,8 @@ msgstr ""
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr ""
@@ -616,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 ""
@@ -627,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!"
@@ -643,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 ""
@@ -658,7 +660,7 @@ msgstr ""
 msgid "Repeated to %s"
 msgstr ""
 
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
 #, php-format
 msgid "Repeats of %s"
 msgstr ""
@@ -668,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 ""
@@ -728,7 +730,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr ""
@@ -792,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 ""
 
@@ -1199,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 ""
 
@@ -1390,7 +1392,7 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr ""
@@ -1532,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 ""
 
@@ -1627,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 ""
 
@@ -1987,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 ""
@@ -2193,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 ""
 
@@ -2563,7 +2565,7 @@ msgstr ""
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr ""
@@ -2735,7 +2737,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3137,76 +3139,80 @@ msgstr ""
 msgid "You must be logged in to view an application."
 msgstr ""
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr ""
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr ""
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr ""
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr ""
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr ""
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3271,12 +3277,12 @@ msgid "Group profile"
 msgstr ""
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr ""
 
@@ -3815,7 +3821,8 @@ msgstr ""
 msgid "User profile"
 msgstr ""
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -3870,7 +3877,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr ""
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -3954,84 +3961,84 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr ""
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr ""
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr ""
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr ""
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr ""
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr ""
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4207,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 ""
@@ -4217,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 ""
 
@@ -4481,11 +4488,11 @@ msgstr ""
 msgid "Sessions configuration"
 msgstr ""
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5452,11 +5459,11 @@ msgstr ""
 msgid "Duplicate notice"
 msgstr ""
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr ""
 
@@ -5730,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 ""
 
index a6a277ba1affe60671ebca8c58c7b3d18327ddcf..a0d407c5c86645bc5e45b09f98c1106d771eed65 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:06+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 (r61864); 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"
@@ -180,22 +180,23 @@ msgstr "Uppdateringar från %1$s och vänner på %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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."
 
@@ -476,12 +477,11 @@ msgstr "grupper på %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Ingen oauth_token-parameter angiven."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Ogiltig storlek."
+msgstr "Ogiltig token."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -521,9 +521,9 @@ msgid ""
 msgstr "Begäran-token %s har godkänts. Byt ut den mot en åtkomst-token."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "Begäran-token %s har nekats."
+msgstr "Begäran-token %s har nekats och återkallats."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -549,6 +549,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 ""
+"Applikationen <strong>%1$s</strong> av <strong>%2$s</strong> vill att "
+"möjligheten att <strong>%3$s</strong> din %4$s kontoinformation. Du bör bara "
+"ge tillgång till ditt %4$s-konto till tredje-parter du litar på."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -556,7 +559,8 @@ msgstr "Konto"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Smeknamn"
@@ -744,7 +748,7 @@ msgstr "Orginal"
 msgid "Preview"
 msgstr "Förhandsgranska"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Ta bort"
@@ -811,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"
 
@@ -913,14 +917,12 @@ msgid "Notices"
 msgstr "Notiser"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Du måste vara inloggad för att redigera en applikation."
+msgstr "Du måste vara inloggad för att ta bort en applikation."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Information om applikation"
+msgstr "Applikation hittades inte."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -934,29 +936,26 @@ msgid "There was a problem with your session token."
 msgstr "Det var ett problem med din sessions-token."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Redigera applikation"
+msgstr "Ta bort applikation"
 
 #: 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 ""
-"Är du säker på att du vill ta bort denna användare? Det kommer rensa all "
-"data om användaren från databasen, utan en säkerhetskopia."
+"Är du säker på att du vill ta bort denna applikation? Detta kommer rensa "
+"bort all data om applikationen från databasen, inklusive alla befintliga "
+"användaranslutningar."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Ta inte bort denna notis"
+msgstr "Ta inte bort denna applikation"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Ikon för denna applikation"
+msgstr "Ta bort denna applikation"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1167,9 +1166,8 @@ msgid "Name is too long (max 255 chars)."
 msgstr "Namnet är för långt (max 255 tecken)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "Smeknamnet används redan. Försök med ett annat."
+msgstr "Namnet används redan. Prova ett annat."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
@@ -1431,7 +1429,7 @@ msgstr "Denna notis är redan en favorit!"
 msgid "Disfavor favorite"
 msgstr "Ta bort märkning som favorit"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Populära notiser"
@@ -1579,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"
 
@@ -1680,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"
 
@@ -2099,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."
@@ -2316,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"
 
@@ -2691,7 +2689,7 @@ msgstr "Biografi"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Plats"
@@ -2880,7 +2878,7 @@ msgstr ""
 "Varför inte [registrera ett konto](%%action.register%%) och bli först att "
 "posta en!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Taggmoln"
 
@@ -3323,71 +3321,71 @@ msgstr "Spara webbplatsinställningar"
 msgid "You must be logged in to view an application."
 msgstr "Du måste vara inloggad för att se en applikation."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Applikationsprofil"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Ikon"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Namn"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Organisation"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Beskrivning"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Statistik"
 
-#: actions/showapplication.php:204
-#, fuzzy, php-format
+#: actions/showapplication.php:203
+#, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "skapad av %1$s - %2$s standardåtkomst - %3$d användare"
+msgstr "Skapad av %1$s - %2$s standardåtkomst - %3$d användare"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "Åtgärder för applikation"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Återställ nyckel & hemlighet"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "Information om applikation"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr "Nyckel för konsument"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr "Hemlighet för konsument"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "URL för begäran-token"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "URL för åtkomst-token"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "Tillåt URL"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3395,6 +3393,11 @@ msgstr ""
 "Notera: Vi stöjder HMAC-SHA1-signaturer. Vi stödjer inte metoden med "
 "klartextsignatur."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Är du säker på att du vill återställa din konsumentnyckel och -hemlighet?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3467,12 +3470,12 @@ msgid "Group profile"
 msgstr "Grupprofil"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Notis"
 
@@ -3545,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. "
 
@@ -3641,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%%%%))"
 
@@ -3653,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
@@ -4049,7 +4052,8 @@ msgstr "Tagg %s"
 msgid "User profile"
 msgstr "Användarprofil"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Foto"
 
@@ -4109,7 +4113,7 @@ msgstr "Ingen profil-ID i begäran."
 msgid "Unsubscribed"
 msgstr "Prenumeration avslutad"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4200,36 +4204,36 @@ msgstr ""
 "prenumerera på den här användarens notiser. Om du inte bett att prenumerera "
 "på någons meddelanden, klicka på \"Avvisa\"."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Licens"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Acceptera"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Prenumerera på denna användare"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Avvisa"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Avvisa denna prenumeration"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Ingen begäran om godkännande!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Prenumeration godkänd"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4239,11 +4243,11 @@ msgstr ""
 "med webbplatsens instruktioner hur du bekräftar en prenumeration. Din "
 "prenumerations-token är:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Prenumeration avvisad"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4253,37 +4257,37 @@ msgstr ""
 "webbplatsens instruktioner för detaljer om hur du fullständingt avvisar "
 "prenumerationen."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "URI för lyssnare '%s' hittades inte här."
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "Lyssnar-URI '%s' är för lång."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "Lyssnar-URI '%s' är en lokal användare."
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "Profil-URL ‘%s’ är för en lokal användare."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "Avatar-URL ‘%s’ är inte giltig."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Kan inte läsa avatar-URL '%s'."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Fel bildtyp för avatar-URL '%s'."
@@ -4372,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, ses."
+"detta program. Om inte, se %s."
 
 #: actions/version.php:189
 msgid "Plugins"
@@ -4479,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"
@@ -4759,12 +4763,12 @@ msgstr "Konfiguration av sökvägar"
 msgid "Sessions configuration"
 msgstr "Konfiguration av sessioner"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 "API-resursen kräver läs- och skrivrättigheter, men du har bara läsrättighet."
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5868,11 +5872,11 @@ msgstr "Fel vid infogning av fjärrprofilen"
 msgid "Duplicate notice"
 msgstr "Duplicerad notis"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Du har blivit utestängd från att prenumerera."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Kunde inte infoga ny prenumeration."
 
@@ -5979,7 +5983,7 @@ msgstr "Upprepa denna notis"
 
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Ingen enskild användare definierad för enanvändarläge."
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6146,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"
 
index d8eae4dc5a4a52170ece069fa615c543b98cb8ff..85719532b8eaf0bf97642aae9711f3f53ccebdbb 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:10+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 (r61864); 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"
@@ -174,22 +174,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 "నిర్ధారణ సంకేతం కనబడలేదు."
@@ -556,7 +557,8 @@ msgstr "ఖాతా"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "పేరు"
@@ -592,14 +594,12 @@ msgid "No such notice."
 msgstr "అటువంటి సందేశమేమీ లేదు."
 
 #: actions/apistatusesretweet.php:83
-#, fuzzy
 msgid "Cannot repeat your own notice."
-msgstr "à°\88 à°²à±\88à°¸à±\86à°¨à±\8dà°¸à±\81à°\95à°¿ à°\85à°\82à°\97à±\80à°\95à°°à°¿à°\82à°\9aà°\95à°ªà±\8bà°¤à±\87 à°®à±\80à°°à±\81 à°¨à°®à±\8bà°¦à±\81à°\9aà±\87à°¸à±\81à°\95à±\8bలేరు."
+msgstr "à°®à±\80 à°¨à±\8bà°\9fà±\80à°¸à±\81ని à°®à±\80à°°à±\87 à°ªà±\81నరావà±\83తిà°\82à°\9aలేరు."
 
 #: actions/apistatusesretweet.php:91
-#, fuzzy
 msgid "Already repeated that notice."
-msgstr "à°\88 à°¨à±\8bà°\9fà±\80à°¸à±\81ని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà±\81"
+msgstr "à°\87à°ªà±\8dà°ªà°\9fà°¿à°\95à±\87 à°\86 à°¨à±\8bà°\9fà±\80à°¸à±\81ని à°ªà±\81నరావà±\83తిà°\82à°\9aారà±\81."
 
 #: actions/apistatusesshow.php:138
 msgid "Status deleted."
@@ -746,7 +746,7 @@ msgstr "అసలు"
 msgid "Preview"
 msgstr "మునుజూపు"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 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 "ఈ వాడుకరిని నిరోధించు"
 
@@ -913,14 +913,12 @@ msgid "Notices"
 msgstr "సందేశాలు"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "à°\89à°ªà°\95రణాలని à°®à°¾à°°à±\8dచడానికి మీరు ప్రవేశించి ఉండాలి."
+msgstr "à°\89à°ªà°\95రణాలని à°¤à±\8aà°²à°\97à°¿à°\82చడానికి మీరు ప్రవేశించి ఉండాలి."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "ఉపకరణ సమాచారం"
+msgstr "ఉపకరణం కనబడలేదు."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -934,29 +932,25 @@ msgid "There was a problem with your session token."
 msgstr ""
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "ఉపకరణాన్ని మార్చు"
+msgstr "ఉపకరణ తొలగింపు"
 
 #: 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 ""
-"à°®à±\80à°°à±\81 à°¨à°¿à°\9cà°\82à°\97ానà±\87 à°\88 à°µà°¾à°¡à±\81à°\95రిని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aాలనà±\81à°\95à±\81à°\82à°\9fà±\81à°¨à±\8dనారా? à°\87ది à°\86 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°­à±\8bà°\97à°\9fà±\8dà°\9fాని à°¡à°¾à°\9fాబà±\87à°¸à±\81 à°¨à±\81à°\82à°¡à°¿ à°¤à±\8aà°²à°\97à°¿à°¸à±\8dà°¤à±\81à°\82ది, "
-"à°µà±\86à°¨à°\95à±\8dà°\95à°¿ à°¤à±\87à°²à±\87à°\95à±\81à°\82à°¡à°¾."
+"à°®à±\80à°°à±\81 à°¨à°¿à°\9cà°\82à°\97ానà±\87 à°\88 à°\89à°ªà°\95రణానà±\8dని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aాలనà±\81à°\95à±\81à°\82à°\9fà±\81à°¨à±\8dనారా? à°\87ది à°\86 à°\89à°ªà°\95à°°à°£à°\82 à°\97à±\81à°°à°¿à°\82à°\9aà°¿ à°­à±\8bà°\97à°\9fà±\8dà°\9fాని, à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤ "
+"వాడà±\81à°\95à°°à±\81à°² à°\85à°¨à±\81à°¸à°\82ధానాలతà±\8b à°¸à°¹à°¾, à°¡à°¾à°\9fాబà±\87à°¸à±\81 à°¨à±\81à°\82à°¡à°¿ à°¤à±\8aà°²à°\97à°¿à°¸à±\8dà°¤à±\81à°\82ది."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "à°\88 à°¨à±\8bà°\9fà±\80à°¸à±\81ని తొలగించకు"
+msgstr "à°\88 à°\89à°ªà°\95రణానà±\8dని తొలగించకు"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "à°\88 à°\89à°ªà°\95రణానిà°\95à°¿ à°ªà±\8dà°°à°¤à±\80à°\95à°\82"
+msgstr "à°\88 à°\89à°ªà°\95రణానà±\8dని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà±\81"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1424,7 +1418,7 @@ msgstr "ఈ నోటీసు ఇప్పటికే మీ ఇష్టా
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "ప్రాచుర్య నోటీసులు"
@@ -1567,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 "వాడుకరిని గుంపు నుండి నిరోధించు"
 
@@ -1667,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 "ఈ వాడుకరిని నిర్వాహకున్ని చేయి"
 
@@ -1707,6 +1701,10 @@ msgid ""
 "for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
 "%%%%)"
 msgstr ""
+"ఒకే రకమైన ఆసక్తులు ఉన్న వ్యక్తులు కలుసుకోడానికి మరియు మాట్లాడుకోడానికి %%%%site.name%%%% "
+"గుంపులు వీలుకల్పిస్తాయి. ఒక గుంపులో చేరిన తర్వాత మీరు \"!groupname\" అన్న సంకేతం ద్వారా ఆ "
+"గుంపు లోని సభ్యులందరికీ సందేశాలని పంపించవచ్చు. మీకు నచ్చిన గుంపు కనబడలేదా? [దాని కోసం వెతకండి](%%"
+"%%action.groupsearch%%%%) లేదా [మీరే కొత్తది సృష్టించండి!](%%%%action.newgroup%%%%)"
 
 #: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
 msgid "Create a new group"
@@ -2035,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\" గుంపు యొక్క ఒక నిర్వాకులు."
@@ -2248,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 ""
 
@@ -2633,7 +2631,7 @@ msgstr "స్వపరిచయం"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "ప్రాంతం"
@@ -2812,7 +2810,7 @@ msgid ""
 "one!"
 msgstr "[ఒక ఖాతాని నమోదుచేసుకుని](%%action.register%%) మీరే మొదట వ్రాసేవారు ఎందుకు కాకూడదు!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "ట్యాగు మేఘం"
 
@@ -3239,77 +3237,82 @@ msgstr "సైటు అమరికలను భద్రపరచు"
 msgid "You must be logged in to view an application."
 msgstr "గుంపుని వదిలివెళ్ళడానికి మీరు ప్రవేశించి ఉండాలి."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr ""
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "ప్రతీకం"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "పేరు"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "సంస్ధ"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "వివరణ"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "గణాంకాలు"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "ఉపకరణ చర్యలు"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "ఉపకరణ సమాచారం"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 #, fuzzy
 msgid "Authorize URL"
 msgstr "రచయిత"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "మీరు నిజంగానే ఈ నోటీసుని తొలగించాలనుకుంటున్నారా?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3374,12 +3377,12 @@ msgid "Group profile"
 msgstr "గుంపు ప్రొఫైలు"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "గమనిక"
 
@@ -3825,12 +3828,12 @@ msgstr "%1$s చందాదార్లు, పేజీ %2$d"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
-msgstr ""
+msgstr "వీళ్ళు మీ నోటీసులని వినే ప్రజలు."
 
 #: actions/subscribers.php:67
 #, php-format
 msgid "These are the people who listen to %s's notices."
-msgstr ""
+msgstr "వీళ్ళు %s యొక్క నోటీసులని వినే ప్రజలు."
 
 #: actions/subscribers.php:108
 msgid ""
@@ -3927,7 +3930,8 @@ msgstr ""
 msgid "User profile"
 msgstr "వాడుకరి ప్రొఫైలు"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "ఫొటో"
 
@@ -3985,7 +3989,7 @@ msgstr ""
 msgid "Unsubscribed"
 msgstr "చందాదార్లు"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4061,7 +4065,7 @@ msgstr "వాడుకరులను కొత్త వారిని ఆహ
 
 #: actions/userauthorization.php:105
 msgid "Authorize subscription"
-msgstr ""
+msgstr "చందాని అధీకరించండి"
 
 #: actions/userauthorization.php:110
 msgid ""
@@ -4070,84 +4074,84 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "లైసెన్సు"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "అంగీకరించు"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "ఈ వాడుకరికి చందాచేరు"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "తిరస్కరించు"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "ఈ చందాని తిరస్కరించు"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "చందాని తిరస్కరించారు."
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "'%s' అనే అవతారపు URL తప్పు"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "'%s' కొరకు తప్పుడు బొమ్మ రకం"
@@ -4326,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)"
@@ -4612,11 +4616,11 @@ msgstr "SMS నిర్ధారణ"
 msgid "Sessions configuration"
 msgstr "రూపకల్పన స్వరూపణం"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5631,11 +5635,11 @@ msgstr "దూరపు ప్రొపైలుని చేర్చటంల
 msgid "Duplicate notice"
 msgstr "కొత్త సందేశం"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "చందాచేరడం నుండి మిమ్మల్ని నిషేధించారు."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr ""
 
@@ -5920,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 "ఒక సంవత్సరం క్రితం"
 
index d406e61596cf2256458569442dbca037ab4f053d..5368680c6b5128409b95f6c91382e67301952dd8 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:13+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 (r61864); 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"
@@ -180,22 +180,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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ı."
@@ -573,7 +574,8 @@ msgstr "Hakkında"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Takma ad"
@@ -768,7 +770,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr ""
@@ -836,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."
@@ -1473,7 +1475,7 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 #, fuzzy
 msgid "Popular notices"
@@ -1626,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."
@@ -1730,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 ""
 
@@ -2118,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."
@@ -2331,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 ""
 
@@ -2729,7 +2731,7 @@ msgstr "Hakkında"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Yer"
@@ -2907,7 +2909,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3327,80 +3329,84 @@ msgstr "Ayarlar"
 msgid "You must be logged in to view an application."
 msgstr ""
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Takma ad"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Yer"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 #, fuzzy
 msgid "Description"
 msgstr "Abonelikler"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "İstatistikler"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3466,12 +3472,12 @@ msgid "Group profile"
 msgstr "Böyle bir durum mesajı yok."
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 #, fuzzy
 msgid "Note"
 msgstr "Durum mesajları"
@@ -4029,7 +4035,8 @@ msgstr ""
 msgid "User profile"
 msgstr "Kullanıcının profili yok."
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4091,7 +4098,7 @@ msgstr "Yetkilendirme isteği yok!"
 msgid "Unsubscribed"
 msgstr "Aboneliği sonlandır"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4182,86 +4189,86 @@ msgstr ""
 "detayları gözden geçirin. Kimsenin durumunu taki etme isteğinde "
 "bulunmadıysanız \"İptal\" tuşuna basın. "
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Kabul et"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "Takip talebine izin verildi"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Reddet"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Bütün abonelikler"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Yetkilendirme isteği yok!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Takip talebine izin verildi"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Abonelik reddedildi."
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Avatar URLi '%s' okunamıyor"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "%s için yanlış resim türü"
@@ -4445,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 ""
@@ -4744,11 +4751,11 @@ msgstr "Eposta adresi onayı"
 msgid "Sessions configuration"
 msgstr "Eposta adresi onayı"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5765,11 +5772,11 @@ msgstr "Uzak profil eklemede hata oluştu"
 msgid "Duplicate notice"
 msgstr "Yeni durum mesajı"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Yeni abonelik eklenemedi."
 
@@ -6060,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"
 
index 3532fdf9f4b0654fdd8a596665512551c2371acc..5f5fa846e69b1718169aec54b22b9ca108c989f4 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:16+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 (r61864); 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"
@@ -182,22 +182,23 @@ msgstr "Оновлення від %1$s та друзів на %2$s!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 метод не знайдено."
 
@@ -481,12 +482,11 @@ msgstr "групи на %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Жодного параметру oauth_token не забезпечено."
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Ð\9dедÑ\96йÑ\81ний Ñ\80озмÑ\96Ñ\80."
+msgstr "Ð\9dевÑ\96Ñ\80ний Ñ\82окен."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -529,9 +529,9 @@ msgstr ""
 "доступу."
 
 #: actions/apioauthauthorize.php:227
-#, fuzzy, php-format
+#, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr "Токен запиту %s було відхилено."
+msgstr "Токен запиту %s було скасовано і відхилено."
 
 #: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
 #: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -557,6 +557,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 ""
+"Додаток <strong>%1$s</strong>  від <strong>%2$s</strong> запитує дозвіл на "
+"<strong>%3$s</strong> дані Вашого акаунту %4$s. Ви повинні надавати дозвіл "
+"на доступ до Вашого акаунту %4$s лише тим стороннім додаткам, яким Ви "
+"довіряєте."
 
 #: actions/apioauthauthorize.php:310 lib/action.php:441
 msgid "Account"
@@ -564,7 +568,8 @@ msgstr "Акаунт"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Ім’я користувача"
@@ -753,7 +758,7 @@ msgstr "Оригінал"
 msgid "Preview"
 msgstr "Перегляд"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr "Видалити"
@@ -820,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 "Блокувати користувача"
 
@@ -921,14 +926,12 @@ msgid "Notices"
 msgstr "Дописи"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Ð\92и Ð¼Ð°Ñ\94Ñ\82е Ñ\81поÑ\87аÑ\82кÑ\83 Ñ\83вÑ\96йÑ\82и, Ð°Ð±Ð¸ Ð¼Ð°Ñ\82и Ð·Ð¼Ð¾Ð³Ñ\83 ÐºÐµÑ\80Ñ\83ваÑ\82и Ð´Ð¾Ð´Ð°Ñ\82ком."
+msgstr "Ð\92и Ð¼Ð°Ñ\94Ñ\82е Ñ\81поÑ\87аÑ\82кÑ\83 Ñ\83вÑ\96йÑ\82и, Ð°Ð±Ð¸ Ð¼Ð°Ñ\82и Ð·Ð¼Ð¾Ð³Ñ\83 Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ\82и Ð´Ð¾Ð´Ð°Ñ\82ок."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Ð\86нÑ\84о Ð´Ð¾Ð´Ð°Ñ\82кÑ\83"
+msgstr "Ð\94одаÑ\82ок Ð½Ðµ Ð²Ð¸Ñ\8fвлено."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -942,29 +945,26 @@ msgid "There was a problem with your session token."
 msgstr "Виникли певні проблеми з токеном поточної сесії."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Ð\9aеÑ\80Ñ\83ваÑ\82и Ð´Ð¾Ð´Ð°Ñ\82ками"
+msgstr "Ð\92идалиÑ\82и Ð´Ð¾Ð´Ð°Ñ\82ок"
 
 #: 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 ""
-"Впевнені, що бажаєте видалити цього користувача? Усі дані буде знищено без "
-"можливості відновлення."
+"Впевнені, що бажаєте видалити цей додаток? У базі даних буде знищено всю "
+"інформацію стосовно нього, включно із даними про під’єднаних до цього "
+"додатку користувачів."
 
 #: actions/deleteapplication.php:156
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Не видаляти цей допис"
+msgstr "Не видаляти додаток"
 
 #: actions/deleteapplication.php:160
-#, fuzzy
 msgid "Delete this application"
-msgstr "Ð\86конка Ð´Ð»Ñ\8f Ñ\86Ñ\8cого Ð´Ð¾Ð´Ð°Ñ\82кÑ\83"
+msgstr "Ð\92идалиÑ\82и Ð´Ð¾Ð´Ð°Ñ\82ок"
 
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1173,7 +1173,6 @@ msgid "Name is too long (max 255 chars)."
 msgstr "Ім’я задовге (255 знаків максимум)."
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
 msgstr "Це ім’я вже використовується. Спробуйте інше."
 
@@ -1436,7 +1435,7 @@ msgstr "Цей допис вже є обраним!"
 msgid "Disfavor favorite"
 msgstr "Видалити з обраних"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
 msgstr "Популярні дописи"
@@ -1582,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 "Блокувати користувача в групі"
 
@@ -1684,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 "Надати цьому користувачеві права адміністратора"
 
@@ -2107,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."
@@ -2324,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 "Такий формат даних не підтримується."
 
@@ -2701,7 +2700,7 @@ msgstr "Про себе"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Розташування"
@@ -2889,7 +2888,7 @@ msgstr ""
 "Чому б не [зареєструватись](%%%%action.register%%%%) і не написати щось "
 "цікаве!"
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Хмарка теґів"
 
@@ -3329,71 +3328,71 @@ msgstr "Зберегти налаштування сайту"
 msgid "You must be logged in to view an application."
 msgstr "Ви повинні спочатку увійти, аби переглянути додаток."
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr "Профіль додатку"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr "Іконка"
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 msgid "Name"
 msgstr "Ім’я"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 msgid "Organization"
 msgstr "Організація"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Опис"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Статистика"
 
-#: actions/showapplication.php:204
-#, fuzzy, php-format
+#: actions/showapplication.php:203
+#, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "створено %1$s — %2$s доступ за замовч. — %3$d користувачів"
+msgstr "Створено %1$s — %2$s доступ за замовч. — %3$d користувачів"
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr "Можливості додатку"
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr "Призначити новий ключ і таємне слово"
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr "Інфо додатку"
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr "Ключ споживача"
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr "Таємно слово споживача"
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr "URL-адреса токена запиту"
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr "URL-адреса токена дозволу"
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr "Авторизувати URL-адресу"
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
@@ -3401,6 +3400,10 @@ msgstr ""
 "До уваги: Всі підписи шифруються за методом HMAC-SHA1. Ми не підтримуємо "
 "шифрування підписів відкритим текстом."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Ви впевнені, що бажаєте скинути Ваш ключ споживача і таємну фразу?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3473,12 +3476,12 @@ msgid "Group profile"
 msgstr "Профіль групи"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr "Зауваження"
 
@@ -4059,7 +4062,8 @@ msgstr "Позначити %s"
 msgid "User profile"
 msgstr "Профіль користувача."
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "Фото"
 
@@ -4118,7 +4122,7 @@ msgstr "У запиті відсутній ID профілю."
 msgid "Unsubscribed"
 msgstr "Відписано"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4206,36 +4210,36 @@ msgstr ""
 "підписатись на дописи цього користувача. Якщо Ви не збирались підписуватись "
 "ні на чиї дописи, просто натисніть «Відмінити»."
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr "Ліцензія"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Погодитись"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr "Підписатись до цього користувача"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Забраковано"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 msgid "Reject this subscription"
 msgstr "Відмінити цю підписку"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Немає запиту на авторизацію!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Підписку авторизовано"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
@@ -4245,11 +4249,11 @@ msgstr ""
 "Звіртесь з інструкціями на сайті для більш конкретної інформації про те, як "
 "авторизувати підписку. Ваш підписний токен:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Підписку скинуто"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
@@ -4259,37 +4263,37 @@ msgstr ""
 "з інструкціями на сайті для більш конкретної інформації про те, як скинути "
 "підписку."
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr "URI слухача «%s» тут не знайдено"
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr "URI слухача ‘%s’ задовге."
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr "URI слухача ‘%s’ це локальний користувач"
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr "URL-адреса профілю ‘%s’ для локального користувача."
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "URL-адреса автари ‘%s’ помилкова."
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Не можна прочитати URL аватари ‘%s’."
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Неправильний тип зображення для URL-адреси аватари ‘%s’."
@@ -4486,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"
@@ -4766,13 +4770,13 @@ msgstr "Конфігурація шляху"
 msgid "Sessions configuration"
 msgstr "Конфігурація сесій"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 "API-ресурс вимагає дозвіл типу «читання-запис», але у вас є лише доступ для "
 "читання."
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5877,11 +5881,11 @@ msgstr "Помилка при додаванні віддаленого проф
 msgid "Duplicate notice"
 msgstr "Дублікат допису"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr "Вас позбавлено можливості підписатись."
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Не вдалося додати нову підписку."
 
@@ -5988,7 +5992,7 @@ msgstr "Вторувати цьому допису"
 
 #: lib/router.php:665
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Користувача для однокористувацького режиму не визначено."
 
 #: lib/sandboxform.php:67
 msgid "Sandbox"
@@ -6155,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 "рік тому"
 
index 91f2cbd943320e7714774262e05e8780cbcba7df..cf152eff5f4d063f0571a73d0287f989e8118211 100644 (file)
@@ -7,12 +7,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:19+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 (r61864); 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"
@@ -179,22 +179,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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!"
@@ -575,7 +576,8 @@ msgstr "Giới thiệu"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "Biệt danh"
@@ -771,7 +773,7 @@ msgstr ""
 msgid "Preview"
 msgstr "Xem trước"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 #, fuzzy
 msgid "Delete"
@@ -841,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"
@@ -1509,7 +1511,7 @@ msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của b
 msgid "Disfavor favorite"
 msgstr "Không thích"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 #, fuzzy
 msgid "Popular notices"
@@ -1666,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"
@@ -1773,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"
@@ -2198,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 "
@@ -2420,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."
 
@@ -2825,7 +2827,7 @@ msgstr "Lý lịch"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "Thành phố"
@@ -3006,7 +3008,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3447,79 +3449,84 @@ msgstr "Thay đổi hình đại diện"
 msgid "You must be logged in to view an application."
 msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "Tin nhắn không có hồ sơ cá nhân"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "Biệt danh"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "Thư mời đã gửi"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Mô tả"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "Số liệu thống kê"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Bạn có chắc chắn là muốn xóa tin nhắn này không?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3585,12 +3592,12 @@ msgid "Group profile"
 msgstr "Thông tin nhóm"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 #, fuzzy
 msgid "Note"
 msgstr "Tin nhắn"
@@ -4167,7 +4174,8 @@ msgstr "Từ khóa"
 msgid "User profile"
 msgstr "Hồ sơ"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4230,7 +4238,7 @@ msgstr "Không có URL cho hồ sơ để quay về."
 msgid "Unsubscribed"
 msgstr "Hết theo"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4323,38 +4331,38 @@ msgstr ""
 "nhắn của các thành viên này. Nếu bạn không yêu cầu đăng nhận xem tin nhắn "
 "của họ, hãy nhấn \"Hủy bỏ\""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Chấp nhận"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "Theo nhóm này"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Từ chối"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "Tất cả đăng nhận"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Không có yêu cầu!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "Đăng nhận được phép"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4365,11 +4373,11 @@ msgstr ""
 "hướng dẫn chi tiết trên site để biết cách cho phép đăng ký. Đăng nhận token "
 "của bạn là:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Đăng nhận từ chối"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4379,37 +4387,37 @@ msgstr ""
 "Đăng nhận này đã bị từ chối, nhưng không có URL nào để quay về. Hãy kiểm tra "
 "các hướng dẫn chi tiết trên site để "
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Không thể đọc URL cho hình đại diện '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Kiểu file ảnh không phù hợp với  '%s'"
@@ -4596,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)"
@@ -4903,11 +4911,11 @@ msgstr "Xác nhận SMS"
 msgid "Sessions configuration"
 msgstr "Xác nhận SMS"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5993,11 +6001,11 @@ msgstr "Lỗi xảy ra khi thêm mới hồ sơ cá nhân"
 msgid "Duplicate notice"
 msgstr "Xóa tin nhắn"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Không thể chèn thêm vào đăng nhận."
 
@@ -6301,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"
 
index 81dcb1db2a7459a882097e656b9acfd256a644ac..a7aeec7ca5c6be5d90671f69f530febaa7798d24 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:22+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 (r61864); 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"
@@ -181,22 +181,23 @@ msgstr "来自%2$s 上 %1$s 和好友的更新!"
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 方法未实现!"
@@ -572,7 +573,8 @@ msgstr "帐号"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "昵称"
@@ -766,7 +768,7 @@ msgstr "原来的"
 msgid "Preview"
 msgstr "预览"
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 #, fuzzy
 msgid "Delete"
@@ -835,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 "阻止该用户"
@@ -1485,7 +1487,7 @@ msgstr "已收藏此通告!"
 msgid "Disfavor favorite"
 msgstr "取消收藏"
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 #, fuzzy
 msgid "Popular notices"
@@ -1644,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 "阻止用户"
@@ -1750,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 ""
 
@@ -2153,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才能编辑这个组"
@@ -2370,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 "不支持的数据格式。"
 
@@ -2766,7 +2768,7 @@ msgstr "自述"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "位置"
@@ -2947,7 +2949,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "标签云聚集"
 
@@ -3381,80 +3383,85 @@ msgstr "头像设置"
 msgid "You must be logged in to view an application."
 msgstr "您必须登录才能邀请其他人使用 %s"
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 #, fuzzy
 msgid "Application profile"
 msgstr "通告没有关联个人信息"
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "昵称"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "分页"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 #, fuzzy
 msgid "Description"
 msgstr "描述"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr "统计"
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "确定要删除这条消息吗?"
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3520,12 +3527,12 @@ msgid "Group profile"
 msgstr "组资料"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr "URL 互联网地址"
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 #, fuzzy
 msgid "Note"
 msgstr "通告"
@@ -4096,7 +4103,8 @@ msgstr "标签"
 msgid "User profile"
 msgstr "用户没有个人信息。"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr "相片"
 
@@ -4160,7 +4168,7 @@ msgstr "服务器没有返回个人信息URL。"
 msgid "Unsubscribed"
 msgstr "退订"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4252,39 +4260,39 @@ msgstr ""
 "请检查详细信息,确认希望订阅此用户的通告。如果您刚才没有要求订阅任何人的通"
 "告,请点击\"取消\"。"
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 #, fuzzy
 msgid "License"
 msgstr "注册证"
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "接受"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 #, fuzzy
 msgid "Subscribe to this user"
 msgstr "订阅 %s"
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "拒绝"
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "所有订阅"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "未收到认证请求!"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr "订阅已确认"
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 #, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4293,11 +4301,11 @@ msgid ""
 msgstr ""
 "订阅已确认,但是没有回传URL。请到此网站查看如何确认订阅。您的订阅标识是:"
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "订阅被拒绝"
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 #, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4305,37 +4313,37 @@ msgid ""
 "subscription."
 msgstr "订阅已被拒绝,但是没有回传URL。请到此网站查看如何拒绝订阅。"
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "无法访问头像URL '%s'"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, fuzzy, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "'%s' 图像格式错误"
@@ -4522,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)"
@@ -4826,11 +4834,11 @@ msgstr "SMS短信确认"
 msgid "Sessions configuration"
 msgstr "SMS短信确认"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5859,12 +5867,12 @@ msgstr "添加远程的个人信息出错"
 msgid "Duplicate notice"
 msgstr "删除通告"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 #, fuzzy
 msgid "You have been banned from subscribing."
 msgstr "那个用户阻止了你的订阅。"
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "无法添加新的订阅。"
 
@@ -6166,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 "一年前"
 
index 7122a0e05b1180410759bd88b07f6dcf7e272d08..815f95eacddd782c9d829cbad3d51bc9ee04c3c6 100644 (file)
@@ -7,12 +7,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-02 19:19+0000\n"
-"PO-Revision-Date: 2010-02-02 19:22:25+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 (r61864); 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"
@@ -177,22 +177,23 @@ msgstr ""
 #: actions/apiaccountupdateprofile.php:97
 #: actions/apiaccountupdateprofilebackgroundimage.php:94
 #: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:128
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 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/apitimelineretweetedtome.php:121
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php: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/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 "確認碼遺失"
@@ -565,7 +566,8 @@ msgstr "關於"
 
 #: actions/apioauthauthorize.php:313 actions/login.php:230
 #: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
 #: lib/userprofile.php:131
 msgid "Nickname"
 msgstr "暱稱"
@@ -758,7 +760,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: actions/avatarsettings.php:149 actions/showapplication.php:247
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:624
 msgid "Delete"
 msgstr ""
@@ -826,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 "無此使用者"
@@ -1460,7 +1462,7 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 #, fuzzy
 msgid "Popular notices"
@@ -1610,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 "無此使用者"
@@ -1712,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 ""
 
@@ -2080,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"
@@ -2290,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 ""
 
@@ -2675,7 +2677,7 @@ msgstr "自我介紹"
 
 #: actions/profilesettings.php:132 actions/register.php:471
 #: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
 #: lib/userprofile.php:164
 msgid "Location"
 msgstr "地點"
@@ -2850,7 +2852,7 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr ""
 
@@ -3262,79 +3264,83 @@ msgstr "線上即時通設定"
 msgid "You must be logged in to view an application."
 msgstr ""
 
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
 msgid "Application profile"
 msgstr ""
 
-#: actions/showapplication.php:160 lib/applicationeditform.php:180
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
 msgid "Icon"
 msgstr ""
 
-#: actions/showapplication.php:170 actions/version.php:195
+#: actions/showapplication.php:169 actions/version.php:195
 #: lib/applicationeditform.php:195
 #, fuzzy
 msgid "Name"
 msgstr "暱稱"
 
-#: actions/showapplication.php:179 lib/applicationeditform.php:222
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
 #, fuzzy
 msgid "Organization"
 msgstr "地點"
 
-#: actions/showapplication.php:188 actions/version.php:198
+#: actions/showapplication.php:187 actions/version.php:198
 #: lib/applicationeditform.php:209 lib/groupeditform.php:172
 #, fuzzy
 msgid "Description"
 msgstr "所有訂閱"
 
-#: actions/showapplication.php:193 actions/showgroup.php:429
+#: actions/showapplication.php:192 actions/showgroup.php:429
 #: lib/profileaction.php:174
 msgid "Statistics"
 msgstr ""
 
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
 msgid "Application actions"
 msgstr ""
 
-#: actions/showapplication.php:232
+#: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:256
+#: actions/showapplication.php:261
 msgid "Application info"
 msgstr ""
 
-#: actions/showapplication.php:258
+#: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
 
-#: actions/showapplication.php:263
+#: actions/showapplication.php:268
 msgid "Consumer secret"
 msgstr ""
 
-#: actions/showapplication.php:268
+#: actions/showapplication.php:273
 msgid "Request token URL"
 msgstr ""
 
-#: actions/showapplication.php:273
+#: actions/showapplication.php:278
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:278
+#: actions/showapplication.php:283
 msgid "Authorize URL"
 msgstr ""
 
-#: actions/showapplication.php:283
+#: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
 #: actions/showfavorites.php:79
 #, fuzzy, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3400,12 +3406,12 @@ msgid "Group profile"
 msgstr "無此通知"
 
 #: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/userauthorization.php:175 lib/userprofile.php:177
 msgid "URL"
 msgstr ""
 
 #: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: actions/userauthorization.php:187 lib/userprofile.php:194
 msgid "Note"
 msgstr ""
 
@@ -3960,7 +3966,8 @@ msgstr ""
 msgid "User profile"
 msgstr "無此通知"
 
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
 msgid "Photo"
 msgstr ""
 
@@ -4020,7 +4027,7 @@ msgstr "無確認請求"
 msgid "Unsubscribed"
 msgstr "此帳號已註冊"
 
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:62 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4106,85 +4113,85 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
 msgid "License"
 msgstr ""
 
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "接受"
 
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
 msgid "Subscribe to this user"
 msgstr ""
 
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
 msgid "Reject"
 msgstr ""
 
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
 #, fuzzy
 msgid "Reject this subscription"
 msgstr "所有訂閱"
 
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "無確認請求"
 
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
 msgid "Subscription authorized"
 msgstr ""
 
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr ""
 
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
 msgstr ""
 
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
 msgstr ""
 
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
 #, fuzzy, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "無法讀取此%sURL的圖像"
 
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
@@ -4367,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 ""
@@ -4660,11 +4667,11 @@ msgstr "確認信箱"
 msgid "Sessions configuration"
 msgstr "確認信箱"
 
-#: lib/apiauth.php:99
+#: lib/apiauth.php:95
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#: lib/apiauth.php:279
+#: lib/apiauth.php:273
 #, php-format
 msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
 msgstr ""
@@ -5664,11 +5671,11 @@ msgstr "新增外部個人資料發生錯誤(Error inserting remote profile)"
 msgid "Duplicate notice"
 msgstr "新訊息"
 
-#: lib/oauthstore.php:466 lib/subs.php:48
+#: lib/oauthstore.php:465 lib/subs.php:48
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "無法新增訂閱"
 
@@ -5955,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 (file)
index e49e2a6..0000000
+++ /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/README b/plugins/FeedSub/README
deleted file mode 100644 (file)
index cbf3adb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Plugin to support importing updates from external RSS and Atom feeds into your timeline.
-
-Uses PubSubHubbub for push feed updates; currently non-PuSH feeds cannot be subscribed.
-
-Todo:
-* set feed icon avatar for actual profiles as well as for preview
-* use channel image and/or favicon for avatar?
-* garbage-collect subscriptions that are no longer being used
-* administrative way to kill feeds?
-* functional l10n
-* clean up subscription form look and workflow
-* use ajax for test/preview in subscription form
-* rssCloud support? (Does anything use it that doesn't support PuSH as well?)
-* possibly a polling daemon to support non-PuSH feeds?
-* likely problems with multiple feeds from the same site, such as category feeds on a blog
-  (currently each feed would publish a separate notice on a separate profile, but pointing to the same post URI.)
-  (could use the local URI I guess, but that's so icky!)
-* problems with Atom feeds that list <link rel="alternate" href="..."/> but don't have the type
-  (such as http://atomgen.appspot.com/feed/5 demo feed); currently it's not recognized and we end up with the feed's master URI
-* make it easier to see what you're subscribed to and unsub from things
-* saner treatment of fullname/nickname?
-* make use of tags/categories from feeds
-* update feed profile data when it changes
-* XML_Feed_Parser has major problems with category and link tags; consider replacing?
diff --git a/plugins/FeedSub/actions/feedsubcallback.php b/plugins/FeedSub/actions/feedsubcallback.php
deleted file mode 100644 (file)
index 0c4280c..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/*
- * 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); }
-
-
-class FeedSubCallbackAction extends Action
-{
-    function handle()
-    {
-        parent::handle();
-        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
-            $this->handlePost();
-        } else {
-            $this->handleGet();
-        }
-    }
-    
-    /**
-     * Handler for POST content updates from the hub
-     */
-    function handlePost()
-    {
-        $feedid = $this->arg('feed');
-        common_log(LOG_INFO, "POST for feed id $feedid");
-        if (!$feedid) {
-            throw new ServerException('Empty or invalid feed id', 400);
-        }
-
-        $feedinfo = Feedinfo::staticGet('id', $feedid);
-        if (!$feedinfo) {
-            throw new ServerException('Unknown feed id ' . $feedid, 400);
-        }
-        
-        $post = file_get_contents('php://input');
-        $feedinfo->postUpdates($post);
-    }
-    
-    /**
-     * Handler for GET verification requests from the hub
-     */
-    function handleGet()
-    {
-        $mode = $this->arg('hub_mode');
-        $topic = $this->arg('hub_topic');
-        $challenge = $this->arg('hub_challenge');
-        $lease_seconds = $this->arg('hub_lease_seconds');
-        $verify_token = $this->arg('hub_verify_token');
-        
-        if ($mode != 'subscribe' && $mode != 'unsubscribe') {
-            common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with mode \"$mode\"");
-            throw new ServerException("Bogus hub callback: bad mode", 404);
-        }
-        
-        $feedinfo = Feedinfo::staticGet('feeduri', $topic);
-        if (!$feedinfo) {
-            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);
-        #}
-        
-        // 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);
-        } else {
-            $feedinfo->sub_end = null;
-        }
-        $feedinfo->update();
-        
-        print $challenge;
-    }
-}
diff --git a/plugins/FeedSub/actions/feedsubsettings.php b/plugins/FeedSub/actions/feedsubsettings.php
deleted file mode 100644 (file)
index 0fba20a..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-<?php
-/*
- * 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); }
-
-class FeedSubSettingsAction extends ConnectSettingsAction
-{
-    protected $feedurl;
-    protected $preview;
-    protected $munger;
-
-    /**
-     * Title of the page
-     *
-     * @return string Title of the page
-     */
-
-    function title()
-    {
-        return _m('Feed subscriptions');
-    }
-
-    /**
-     * Instructions for use
-     *
-     * @return instructions for use
-     */
-
-    function getInstructions()
-    {
-        return _m('You can subscribe to feeds from other sites; ' .
-                  'updates will appear in your personal timeline.');
-    }
-
-    /**
-     * Content area of the page
-     *
-     * Shows a form for associating a Twitter account with this
-     * StatusNet account. Also lets the user set preferences.
-     *
-     * @return void
-     */
-
-    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');
-
-        if ($this->preview) {
-            $this->submit('subscribe', _m('Subscribe'));
-        } else {
-            $this->submit('validate', _m('Continue'));
-        }
-
-        $this->elementEnd('fieldset');
-
-        $this->elementEnd('form');
-
-        if ($this->preview) {
-            $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('validate')) {
-            $this->validateAndPreview();
-        } else 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 = trim($this->arg('feedurl'));
-        
-        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->feedinfo = $this->munger->feedInfo();
-
-        if ($this->feedinfo->huburi == '') {
-            $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
-            return false;
-        }
-        
-        return true;
-    }
-
-    function saveFeed()
-    {
-        if ($this->validateFeed()) {
-            $this->preview = true;
-            $this->feedinfo = Feedinfo::ensureProfile($this->munger);
-
-            // 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}");
-            } else {
-                $ok = $this->feedinfo->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!'));
-            } else {
-                $this->showForm(_m('Feed subscription failed!'));
-            }
-        }
-    }
-
-    function validateAndPreview()
-    {
-        if ($this->validateFeed()) {
-            $this->preview = true;
-            $this->showForm(_m('Previewing feed:'));
-        }
-    }
-
-    function previewFeed()
-    {
-        $feedinfo = $this->munger->feedinfo();
-        $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.');
-        }
-    }
-
-    function showScripts()
-    {
-        parent::showScripts();
-        $this->autofocus('feedurl');
-    }
-}
diff --git a/plugins/FeedSub/extlib/README b/plugins/FeedSub/extlib/README
deleted file mode 100644 (file)
index 799b40c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-XML_Feed_Parser 1.0.3 is not currently actively maintained, and has
-a nasty bug which breaks getting the feed target link from WordPress
-feeds and possibly others that are RSS2-formatted but include an
-<atom:link> self-link element as well.
-
-Patch from this bug report is included:
-http://pear.php.net/bugs/bug.php?id=16416
-
-If upgrading, be sure that fix is included with the future upgrade!
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser.php b/plugins/FeedSub/extlib/XML/Feed/Parser.php
deleted file mode 100755 (executable)
index ffe8220..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Key gateway class for XML_Feed_Parser package
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL
- * @version    CVS: $Id: Parser.php,v 1.24 2006/08/15 13:04:00 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * XML_Feed_Parser_Type is an abstract class required by all of our
- * feed types. It makes sense to load it here to keep the other files
- * clean.
- */
-require_once 'XML/Feed/Parser/Type.php';
-
-/**
- * We will throw exceptions when errors occur.
- */
-require_once 'XML/Feed/Parser/Exception.php';
-
-/**
- * This is the core of the XML_Feed_Parser package. It identifies feed types 
- * and abstracts access to them. It is an iterator, allowing for easy access 
- * to the entire feed.
- *
- * @author  James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser implements Iterator
-{
-    /**
-     * This is where we hold the feed object 
-     * @var Object
-     */
-    private $feed;
-
-    /**
-     * To allow for extensions, we make a public reference to the feed model 
-     * @var DOMDocument
-     */
-    public $model;
-    
-    /**
-     * A map between entry ID and offset
-     * @var array
-     */
-    protected $idMappings = array();
-
-    /**
-     * A storage space for Namespace URIs.
-     * @var array
-     */
-    private $feedNamespaces = array(
-        'rss2' => array(
-            'http://backend.userland.com/rss',
-            'http://backend.userland.com/rss2',
-            'http://blogs.law.harvard.edu/tech/rss'));
-    /**
-     * Detects feed types and instantiate appropriate objects.
-     *
-     * Our constructor takes care of detecting feed types and instantiating
-     * appropriate classes. For now we're going to treat Atom 0.3 as Atom 1.0
-     * but raise a warning. I do not intend to introduce full support for 
-     * Atom 0.3 as it has been deprecated, but others are welcome to.
-     *
-     * @param    string    $feed    XML serialization of the feed
-     * @param    bool    $strict    Whether or not to validate the feed
-     * @param    bool    $suppressWarnings Trigger errors for deprecated feed types?
-     * @param    bool    $tidy    Whether or not to try and use the tidy library on input
-     */
-    function __construct($feed, $strict = false, $suppressWarnings = false, $tidy = false)
-    {
-        $this->model = new DOMDocument;
-        if (! $this->model->loadXML($feed)) {
-            if (extension_loaded('tidy') && $tidy) {
-                $tidy = new tidy;
-                $tidy->parseString($feed, 
-                    array('input-xml' => true, 'output-xml' => true));
-                $tidy->cleanRepair();
-                if (! $this->model->loadXML((string) $tidy)) {
-                    throw new XML_Feed_Parser_Exception('Invalid input: this is not ' .
-                        'valid XML');
-                }
-            } else {
-                throw new XML_Feed_Parser_Exception('Invalid input: this is not valid XML');
-            }
-
-        }
-
-        /* detect feed type */
-        $doc_element = $this->model->documentElement;
-        $error = false;
-
-        switch (true) {
-            case ($doc_element->namespaceURI == 'http://www.w3.org/2005/Atom'):
-                require_once 'XML/Feed/Parser/Atom.php';
-                require_once 'XML/Feed/Parser/AtomElement.php';
-                $class = 'XML_Feed_Parser_Atom';
-                break;
-            case ($doc_element->namespaceURI == 'http://purl.org/atom/ns#'):
-                require_once 'XML/Feed/Parser/Atom.php';
-                require_once 'XML/Feed/Parser/AtomElement.php';
-                $class = 'XML_Feed_Parser_Atom';
-                $error = 'Atom 0.3 deprecated, using 1.0 parser which won\'t provide ' .
-                    'all options';
-                break;
-            case ($doc_element->namespaceURI == 'http://purl.org/rss/1.0/' || 
-                ($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1 
-                && $doc_element->childNodes->item(1)->namespaceURI == 
-                'http://purl.org/rss/1.0/')):
-                require_once 'XML/Feed/Parser/RSS1.php';
-                require_once 'XML/Feed/Parser/RSS1Element.php';
-                $class = 'XML_Feed_Parser_RSS1';
-                break;
-            case ($doc_element->namespaceURI == 'http://purl.org/rss/1.1/' || 
-                ($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1 
-                && $doc_element->childNodes->item(1)->namespaceURI == 
-                'http://purl.org/rss/1.1/')):
-                require_once 'XML/Feed/Parser/RSS11.php';
-                require_once 'XML/Feed/Parser/RSS11Element.php';
-                $class = 'XML_Feed_Parser_RSS11';
-                break;
-            case (($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1
-                && $doc_element->childNodes->item(1)->namespaceURI == 
-                'http://my.netscape.com/rdf/simple/0.9/') || 
-                $doc_element->namespaceURI == 'http://my.netscape.com/rdf/simple/0.9/'):
-                require_once 'XML/Feed/Parser/RSS09.php';
-                require_once 'XML/Feed/Parser/RSS09Element.php';
-                $class = 'XML_Feed_Parser_RSS09';
-                break;
-            case ($doc_element->tagName == 'rss' and
-                $doc_element->hasAttribute('version') && 
-                $doc_element->getAttribute('version') == 0.91):
-                $error = 'RSS 0.91 has been superceded by RSS2.0. Using RSS2.0 parser.';
-                require_once 'XML/Feed/Parser/RSS2.php';
-                require_once 'XML/Feed/Parser/RSS2Element.php';
-                $class = 'XML_Feed_Parser_RSS2';
-                break;
-            case ($doc_element->tagName == 'rss' and
-                $doc_element->hasAttribute('version') && 
-                $doc_element->getAttribute('version') == 0.92):
-                $error = 'RSS 0.92 has been superceded by RSS2.0. Using RSS2.0 parser.';
-                require_once 'XML/Feed/Parser/RSS2.php';
-                require_once 'XML/Feed/Parser/RSS2Element.php';
-                $class = 'XML_Feed_Parser_RSS2';
-                break;
-            case (in_array($doc_element->namespaceURI, $this->feedNamespaces['rss2'])
-                || $doc_element->tagName == 'rss'):
-                if (! $doc_element->hasAttribute('version') || 
-                    $doc_element->getAttribute('version') != 2) {
-                    $error = 'RSS version not specified. Parsing as RSS2.0';
-                }
-                require_once 'XML/Feed/Parser/RSS2.php';
-                require_once 'XML/Feed/Parser/RSS2Element.php';
-                $class = 'XML_Feed_Parser_RSS2';
-                break;
-            default:
-                throw new XML_Feed_Parser_Exception('Feed type unknown');
-                break;
-        }
-
-        if (! $suppressWarnings && ! empty($error)) {
-            trigger_error($error, E_USER_WARNING);
-        }
-
-        /* Instantiate feed object */
-        $this->feed = new $class($this->model, $strict);
-    }
-
-    /**
-     * Proxy to allow feed element names to be used as method names
-     *
-     * For top-level feed elements we will provide access using methods or 
-     * attributes. This function simply passes on a request to the appropriate 
-     * feed type object.
-     *
-     * @param   string  $call - the method being called
-     * @param   array   $attributes
-     */
-    function __call($call, $attributes)
-    {
-        $attributes = array_pad($attributes, 5, false);
-        list($a, $b, $c, $d, $e) = $attributes;
-        return $this->feed->$call($a, $b, $c, $d, $e);
-    }
-
-    /**
-     * Proxy to allow feed element names to be used as attribute names
-     *
-     * To allow variable-like access to feed-level data we use this
-     * method. It simply passes along to __call() which in turn passes
-     * along to the relevant object.
-     *
-     * @param   string  $val - the name of the variable required
-     */
-    function __get($val)
-    {
-        return $this->feed->$val;
-    }
-
-    /**
-     * Provides iteration functionality.
-     *
-     * Of course we must be able to iterate... This function simply increases
-     * our internal counter.
-     */
-    function next()
-    {
-        if (isset($this->current_item) && 
-            $this->current_item <= $this->feed->numberEntries - 1) {
-            ++$this->current_item;
-        } else if (! isset($this->current_item)) {
-            $this->current_item = 0;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Return XML_Feed_Type object for current element
-     *
-     * @return    XML_Feed_Parser_Type Object
-     */
-    function current()
-    {
-        return $this->getEntryByOffset($this->current_item);
-    }
-
-    /**
-     * For iteration -- returns the key for the current stage in the array.
-     *
-     * @return    int
-     */    
-    function key()
-    {
-        return $this->current_item;
-    }
-
-    /**
-     * For iteration -- tells whether we have reached the 
-     * end.
-     *
-     * @return    bool
-     */
-    function valid()
-    {
-        return $this->current_item < $this->feed->numberEntries;
-    }
-
-    /**
-     * For iteration -- resets the internal counter to the beginning.
-     */
-    function rewind()
-    {
-        $this->current_item = 0;
-    }
-
-    /**
-     * Provides access to entries by ID if one is specified in the source feed.
-     *
-     * As well as allowing the items to be iterated over we want to allow
-     * users to be able to access a specific entry. This is one of two ways of
-     * doing that, the other being by offset. This method can be quite slow
-     * if dealing with a large feed that hasn't yet been processed as it
-     * instantiates objects for every entry until it finds the one needed.
-     *
-     * @param    string    $id  Valid ID for the given feed format
-     * @return    XML_Feed_Parser_Type|false
-     */            
-    function getEntryById($id)
-    {
-        if (isset($this->idMappings[$id])) {
-            return $this->getEntryByOffset($this->idMappings[$id]);
-        }
-
-        /* 
-         * Since we have not yet encountered that ID, let's go through all the
-         * remaining entries in order till we find it.
-         * This is a fairly slow implementation, but it should work.
-         */
-        return $this->feed->getEntryById($id);
-    }
-
-    /**
-     * Retrieve entry by numeric offset, starting from zero.
-     *
-     * As well as allowing the items to be iterated over we want to allow
-     * users to be able to access a specific entry. This is one of two ways of
-     * doing that, the other being by ID.
-     *
-     * @param    int    $offset The position of the entry within the feed, starting from 0
-     * @return    XML_Feed_Parser_Type|false
-     */
-    function getEntryByOffset($offset)
-    {
-        if ($offset < $this->feed->numberEntries) {
-            if (isset($this->feed->entries[$offset])) {
-                return $this->feed->entries[$offset];
-            } else {
-                try {
-                    $this->feed->getEntryByOffset($offset);
-                } catch (Exception $e) {
-                    return false;
-                }
-                $id = $this->feed->entries[$offset]->getID();
-                $this->idMappings[$id] = $offset;
-                return $this->feed->entries[$offset];
-            }
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Retrieve version details from feed type class.
-     *
-     * @return void
-     * @author James Stewart
-     */
-    function version()
-    {
-        return $this->feed->version;
-    }
-    
-    /**
-     * Returns a string representation of the feed.
-     * 
-     * @return String
-     **/
-    function __toString()
-    {
-        return $this->feed->__toString();
-    }
-}
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php b/plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php
deleted file mode 100644 (file)
index c7e218a..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Atom feed class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: Atom.php,v 1.29 2008/03/30 22:00:36 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
-*/
-
-/**
- * This is the class that determines how we manage Atom 1.0 feeds
- * 
- * How we deal with constructs:
- *  date - return as unix datetime for use with the 'date' function unless specified otherwise
- *  text - return as is. optional parameter will give access to attributes
- *  person - defaults to name, but parameter based access
- *
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_Atom extends XML_Feed_Parser_Type
-{
-    /**
-     * The URI of the RelaxNG schema used to (optionally) validate the feed 
-     * @var string
-     */
-    private $relax = 'atom.rnc';
-
-    /**
-     * We're likely to use XPath, so let's keep it global 
-     * @var DOMXPath
-     */
-    public $xpath;
-
-    /**
-     * When performing XPath queries we will use this prefix 
-     * @var string
-     */
-    private $xpathPrefix = '//';
-
-    /**
-     * The feed type we are parsing 
-     * @var string
-     */
-    public $version = 'Atom 1.0';
-
-    /** 
-     * The class used to represent individual items 
-     * @var string
-     */
-    protected $itemClass = 'XML_Feed_Parser_AtomElement';
-    
-    /** 
-     * The element containing entries 
-     * @var string
-     */
-    protected $itemElement = 'entry';
-
-    /**
-     * Here we map those elements we're not going to handle individually
-     * to the constructs they are. The optional second parameter in the array
-     * tells the parser whether to 'fall back' (not apt. at the feed level) or
-     * fail if the element is missing. If the parameter is not set, the function
-     * will simply return false and leave it to the client to decide what to do.
-     * @var array
-     */
-    protected $map = array(
-        'author' => array('Person'),
-        'contributor' => array('Person'),
-        'icon' => array('Text'),
-        'logo' => array('Text'),
-        'id' => array('Text', 'fail'),
-        'rights' => array('Text'),
-        'subtitle' => array('Text'),
-        'title' => array('Text', 'fail'),
-        'updated' => array('Date', 'fail'),
-        'link' => array('Link'),
-        'generator' => array('Text'),
-        'category' => array('Category'));
-
-    /**
-     * Here we provide a few mappings for those very special circumstances in
-     * which it makes sense to map back to the RSS2 spec. Key is RSS2 version
-     * value is an array consisting of the equivalent in atom and any attributes
-     * needed to make the mapping.
-     * @var array
-     */
-    protected $compatMap = array(
-        'guid' => array('id'),
-        'links' => array('link'),
-        'tags' => array('category'),
-        'contributors' => array('contributor'));
-
-    /**
-     * Our constructor does nothing more than its parent.
-     * 
-     * @param    DOMDocument    $xml    A DOM object representing the feed
-     * @param    bool (optional) $string    Whether or not to validate this feed
-     */
-    function __construct(DOMDocument $model, $strict = false)
-    {
-        $this->model = $model;
-
-        if ($strict) {
-            if (! $this->model->relaxNGValidateSource($this->relax)) {
-                throw new XML_Feed_Parser_Exception('Failed required validation');
-            }
-        }
-
-        $this->xpath = new DOMXPath($this->model);
-        $this->xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
-        $this->numberEntries = $this->count('entry');
-    }
-
-    /**
-     * Implement retrieval of an entry based on its ID for atom feeds.
-     *
-     * This function uses XPath to get the entry based on its ID. If DOMXPath::evaluate
-     * is available, we also use that to store a reference to the entry in the array
-     * used by getEntryByOffset so that method does not have to seek out the entry
-     * if it's requested that way.
-     * 
-     * @param    string    $id    any valid Atom ID.
-     * @return    XML_Feed_Parser_AtomElement
-     */
-    function getEntryById($id)
-    {
-        if (isset($this->idMappings[$id])) {
-            return $this->entries[$this->idMappings[$id]];
-        }
-
-        $entries = $this->xpath->query("//atom:entry[atom:id='$id']");
-
-        if ($entries->length > 0) {
-            $xmlBase = $entries->item(0)->baseURI;
-            $entry = new $this->itemClass($entries->item(0), $this, $xmlBase);
-            
-            if (in_array('evaluate', get_class_methods($this->xpath))) {
-                $offset = $this->xpath->evaluate("count(preceding-sibling::atom:entry)", $entries->item(0));
-                $this->entries[$offset] = $entry;
-            }
-
-            $this->idMappings[$id] = $entry;
-
-            return $entry;
-        }
-        
-    }
-
-    /**
-     * Retrieves data from a person construct.
-     *
-     * Get a person construct. We default to the 'name' element but allow
-     * access to any of the elements.
-     * 
-     * @param    string    $method    The name of the person construct we want
-     * @param    array     $arguments    An array which we hope gives a 'param'
-     * @return    string|false
-     */
-    protected function getPerson($method, $arguments)
-    {
-        $offset = empty($arguments[0]) ? 0 : $arguments[0];
-        $parameter = empty($arguments[1]['param']) ? 'name' : $arguments[1]['param'];
-        $section = $this->model->getElementsByTagName($method);
-        
-        if ($parameter == 'url') {
-            $parameter = 'uri';
-        }
-
-        if ($section->length <= $offset) {
-            return false;
-        }
-
-        $param = $section->item($offset)->getElementsByTagName($parameter);
-        if ($param->length == 0) {
-            return false;
-        }
-        return $param->item(0)->nodeValue;
-    }
-
-    /**
-     * Retrieves an element's content where that content is a text construct.
-     *
-     * Get a text construct. When calling this method, the two arguments
-     * allowed are 'offset' and 'attribute', so $parser->subtitle() would
-     * return the content of the element, while $parser->subtitle(false, 'type')
-     * would return the value of the type attribute.
-     *
-     * @todo    Clarify overlap with getContent()
-     * @param    string    $method    The name of the text construct we want
-     * @param    array     $arguments    An array which we hope gives a 'param'
-     * @return    string
-     */
-    protected function getText($method, $arguments)
-    {
-        $offset = empty($arguments[0]) ? 0: $arguments[0];
-        $attribute = empty($arguments[1]) ? false : $arguments[1];
-        $tags = $this->model->getElementsByTagName($method);
-
-        if ($tags->length <= $offset) {
-            return false;
-        }
-
-        $content = $tags->item($offset);
-
-        if (! $content->hasAttribute('type')) {
-            $content->setAttribute('type', 'text');
-        }
-        $type = $content->getAttribute('type');
-
-        if (! empty($attribute) and 
-            ! ($method == 'generator' and $attribute == 'name')) {
-            if ($content->hasAttribute($attribute)) {
-                return $content->getAttribute($attribute);
-            } else if ($attribute == 'href' and $content->hasAttribute('uri')) {
-                return $content->getAttribute('uri');
-            }
-            return false;
-        }
-
-        return $this->parseTextConstruct($content);
-    }
-    
-    /**
-     * Extract content appropriately from atom text constructs
-     *
-     * Because of different rules applied to the content element and other text
-     * constructs, they are deployed as separate functions, but they share quite
-     * a bit of processing. This method performs the core common process, which is
-     * to apply the rules for different mime types in order to extract the content.
-     *
-     * @param   DOMNode $content    the text construct node to be parsed
-     * @return String
-     * @author James Stewart
-     **/
-    protected function parseTextConstruct(DOMNode $content)
-    {
-        if ($content->hasAttribute('type')) {
-            $type = $content->getAttribute('type');
-        } else {
-            $type = 'text';
-        }
-
-        if (strpos($type, 'text/') === 0) {
-            $type = 'text';
-        }
-
-        switch ($type) {
-            case 'text':
-            case 'html':
-                return $content->textContent;
-                break;
-            case 'xhtml':
-                $container = $content->getElementsByTagName('div');
-                if ($container->length == 0) {
-                    return false;
-                }
-                $contents = $container->item(0);
-                if ($contents->hasChildNodes()) {
-                    /* Iterate through, applying xml:base and store the result */
-                    $result = '';
-                    foreach ($contents->childNodes as $node) {
-                        $result .= $this->traverseNode($node);
-                    }
-                    return $result;
-                }
-                break;
-            case preg_match('@^[a-zA-Z]+/[a-zA-Z+]*xml@i', $type) > 0:
-                return $content;
-                break;
-            case 'application/octet-stream':
-            default:
-                return base64_decode(trim($content->nodeValue));
-                break;
-        }
-        return false;
-    }
-    /**
-     * Get a category from the entry.
-     *
-     * A feed or entry can have any number of categories. A category can have the
-     * attributes term, scheme and label.
-     * 
-     * @param    string    $method    The name of the text construct we want
-     * @param    array     $arguments    An array which we hope gives a 'param'
-     * @return    string
-     */
-    function getCategory($method, $arguments)
-    {
-        $offset = empty($arguments[0]) ? 0: $arguments[0];
-        $attribute = empty($arguments[1]) ? 'term' : $arguments[1];
-        $categories = $this->model->getElementsByTagName('category');
-        if ($categories->length <= $offset) {
-            $category = $categories->item($offset);
-            if ($category->hasAttribute($attribute)) {
-                return $category->getAttribute($attribute);
-            }
-        }
-        return false;
-    }
-
-    /**
-     * This element must be present at least once with rel="feed". This element may be 
-     * present any number of further times so long as there is no clash. If no 'rel' is 
-     * present and we're asked for one, we follow the example of the Universal Feed
-     * Parser and presume 'alternate'.
-     *
-     * @param    int    $offset    the position of the link within the container
-     * @param    string    $attribute    the attribute name required
-     * @param    array     an array of attributes to search by
-     * @return    string    the value of the attribute
-     */
-    function getLink($offset = 0, $attribute = 'href', $params = false)
-    {
-        if (is_array($params) and !empty($params)) {
-            $terms = array();
-            $alt_predicate = '';
-            $other_predicate = '';
-
-            foreach ($params as $key => $value) {
-                if ($key == 'rel' && $value == 'alternate') {
-                    $alt_predicate = '[not(@rel) or @rel="alternate"]';
-                } else {
-                    $terms[] = "@$key='$value'";
-                }
-            }
-            if (!empty($terms)) {
-                $other_predicate = '[' . join(' and ', $terms) . ']';
-            }
-            $query =  $this->xpathPrefix . 'atom:link' . $alt_predicate . $other_predicate;
-            $links = $this->xpath->query($query);
-        } else {
-            $links = $this->model->getElementsByTagName('link');
-        }
-        if ($links->length > $offset) {
-            if ($links->item($offset)->hasAttribute($attribute)) {
-                $value = $links->item($offset)->getAttribute($attribute);
-                if ($attribute == 'href') {
-                    $value = $this->addBase($value, $links->item($offset));
-                }
-                return $value;
-            } else if ($attribute == 'rel') {
-                return 'alternate';
-            }
-        }
-        return false;
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php b/plugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php
deleted file mode 100755 (executable)
index 063ecb6..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * AtomElement class for XML_Feed_Parser package
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: AtomElement.php,v 1.19 2007/03/26 12:43:11 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class provides support for atom entries. It will usually be called by
- * XML_Feed_Parser_Atom with which it shares many methods.
- *
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_AtomElement extends XML_Feed_Parser_Atom
-{
-    /**
-     * This will be a reference to the parent object for when we want
-     * to use a 'fallback' rule 
-     * @var XML_Feed_Parser_Atom
-     */
-    protected $parent;
-
-    /**
-     * When performing XPath queries we will use this prefix 
-     * @var string
-     */
-    private $xpathPrefix = '';
-    
-    /**
-     * xml:base values inherited by the element 
-     * @var string
-     */
-    protected $xmlBase;
-
-    /**
-     * Here we provide a few mappings for those very special circumstances in
-     * which it makes sense to map back to the RSS2 spec or to manage other
-     * compatibilities (eg. with the Univeral Feed Parser). Key is the other version's
-     * name for the command, value is an array consisting of the equivalent in our atom 
-     * api and any attributes needed to make the mapping.
-     * @var array
-     */
-    protected $compatMap = array(
-        'guid' => array('id'),
-        'links' => array('link'),
-        'tags' => array('category'),
-        'contributors' => array('contributor'));
-        
-    /**
-     * Our specific element map 
-     * @var array
-     */
-    protected $map = array(
-        'author' => array('Person', 'fallback'),
-        'contributor' => array('Person'),
-        'id' => array('Text', 'fail'),
-        'published' => array('Date'),
-        'updated' => array('Date', 'fail'),
-        'title' => array('Text', 'fail'),
-        'rights' => array('Text', 'fallback'),
-        'summary' => array('Text'),
-        'content' => array('Content'),
-        'link' => array('Link'),
-        'enclosure' => array('Enclosure'),
-        'category' => array('Category'));
-
-    /**
-     * Store useful information for later.
-     *
-     * @param   DOMElement  $element - this item as a DOM element
-     * @param   XML_Feed_Parser_Atom    $parent - the feed of which this is a member
-     */
-    function __construct(DOMElement $element, $parent, $xmlBase = '')
-    {
-        $this->model = $element;
-        $this->parent = $parent;
-        $this->xmlBase = $xmlBase;
-        $this->xpathPrefix = "//atom:entry[atom:id='" . $this->id . "']/";
-        $this->xpath = $this->parent->xpath;
-    }
-
-    /**
-     * Provides access to specific aspects of the author data for an atom entry
-     *
-     * Author data at the entry level is more complex than at the feed level.
-     * If atom:author is not present for the entry we need to look for it in
-     * an atom:source child of the atom:entry. If it's not there either, then
-     * we look to the parent for data.
-     *
-     * @param   array
-     * @return  string
-     */
-    function getAuthor($arguments)
-    {
-        /* Find out which part of the author data we're looking for */
-        if (isset($arguments['param'])) {
-            $parameter = $arguments['param'];
-        } else {
-            $parameter = 'name';
-        }
-        
-        $test = $this->model->getElementsByTagName('author');
-        if ($test->length > 0) {
-            $item = $test->item(0);
-            return $item->getElementsByTagName($parameter)->item(0)->nodeValue;
-        }
-        
-        $source = $this->model->getElementsByTagName('source');
-        if ($source->length > 0) {
-            $test = $this->model->getElementsByTagName('author');
-            if ($test->length > 0) {
-                $item = $test->item(0);
-                return $item->getElementsByTagName($parameter)->item(0)->nodeValue;
-            }
-        }
-        return $this->parent->getAuthor($arguments);
-    }
-
-    /**
-     * Returns the content of the content element or info on a specific attribute
-     *
-     * This element may or may not be present. It cannot be present more than
-     * once. It may have a 'src' attribute, in which case there's no content
-     * If not present, then the entry must have link with rel="alternate".
-     * If there is content we return it, if not and there's a 'src' attribute
-     * we return the value of that instead. The method can take an 'attribute'
-     * argument, in which case we return the value of that attribute if present.
-     * eg. $item->content("type") will return the type of the content. It is
-     * recommended that all users check the type before getting the content to
-     * ensure that their script is capable of handling the type of returned data.
-     * (data carried in the content element can be either 'text', 'html', 'xhtml', 
-     * or any standard MIME type).
-     *
-     * @return  string|false
-     */
-    protected function getContent($method, $arguments = array())
-    {
-        $attribute = empty($arguments[0]) ? false : $arguments[0];
-        $tags = $this->model->getElementsByTagName('content');
-
-        if ($tags->length == 0) {
-            return false;
-        }
-
-        $content = $tags->item(0);
-
-        if (! $content->hasAttribute('type')) {
-            $content->setAttribute('type', 'text');
-        }
-        if (! empty($attribute)) {
-            return $content->getAttribute($attribute);
-        }
-
-        $type = $content->getAttribute('type');
-
-        if (! empty($attribute)) {
-            if ($content->hasAttribute($attribute))
-            {
-                return $content->getAttribute($attribute);
-            }
-            return false;
-        }
-
-        if ($content->hasAttribute('src')) {
-            return $content->getAttribute('src');
-        }
-
-        return $this->parseTextConstruct($content);
-     }
-
-    /**
-     * For compatibility, this method provides a mapping to access enclosures.
-     *
-     * The Atom spec doesn't provide for an enclosure element, but it is
-     * generally supported using the link element with rel='enclosure'.
-     *
-     * @param   string  $method - for compatibility with our __call usage
-     * @param   array   $arguments - for compatibility with our __call usage
-     * @return  array|false
-     */
-    function getEnclosure($method, $arguments = array())
-    {
-        $offset = isset($arguments[0]) ? $arguments[0] : 0;
-        $query = "//atom:entry[atom:id='" . $this->getText('id', false) . 
-            "']/atom:link[@rel='enclosure']";
-
-        $encs = $this->parent->xpath->query($query);
-        if ($encs->length > $offset) {
-            try {
-                if (! $encs->item($offset)->hasAttribute('href')) {
-                    return false;
-                }
-                $attrs = $encs->item($offset)->attributes;
-                $length = $encs->item($offset)->hasAttribute('length') ? 
-                    $encs->item($offset)->getAttribute('length') : false;
-                return array(
-                    'url' => $attrs->getNamedItem('href')->value,
-                    'type' => $attrs->getNamedItem('type')->value,
-                    'length' => $length);
-            } catch (Exception $e) {
-                return false;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Get details of this entry's source, if available/relevant
-     *
-     * Where an atom:entry is taken from another feed then the aggregator
-     * is supposed to include an atom:source element which replicates at least
-     * the atom:id, atom:title, and atom:updated metadata from the original
-     * feed. Atom:source therefore has a very similar structure to atom:feed
-     * and if we find it we will return it as an XML_Feed_Parser_Atom object.
-     *
-     * @return  XML_Feed_Parser_Atom|false
-     */
-    function getSource()
-    {
-        $test = $this->model->getElementsByTagName('source');
-        if ($test->length == 0) {
-            return false;
-        }
-        $source = new XML_Feed_Parser_Atom($test->item(0));
-    }
-
-    /**
-     * Get the entry as an XML string
-     *
-     * Return an XML serialization of the feed, should it be required. Most 
-     * users however, will already have a serialization that they used when 
-     * instantiating the object.
-     *
-     * @return    string    XML serialization of element
-     */    
-    function __toString()
-    {
-        $simple = simplexml_import_dom($this->model);
-        return $simple->asXML();
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/Exception.php b/plugins/FeedSub/extlib/XML/Feed/Parser/Exception.php
deleted file mode 100755 (executable)
index 1e76e3f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Keeps the exception class for XML_Feed_Parser.
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL
- * @version    CVS: $Id: Exception.php,v 1.3 2005/11/07 01:52:35 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-/**
- * We are extending PEAR_Exception
- */
-require_once 'PEAR/Exception.php';
-
-/**
- * XML_Feed_Parser_Exception is a simple extension of PEAR_Exception, existing
- * to help with identification of the source of exceptions.
- *
- * @author  James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */ 
-class XML_Feed_Parser_Exception extends PEAR_Exception
-{
-
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php
deleted file mode 100755 (executable)
index 07f38f9..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS0.9 class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS09.php,v 1.5 2006/07/26 21:18:46 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS0.9 feeds.
- * 
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- * @todo    Find a Relax NG URI we can use
- */
-class XML_Feed_Parser_RSS09 extends XML_Feed_Parser_Type
-{
-    /**
-     * The URI of the RelaxNG schema used to (optionally) validate the feed 
-     * @var string
-     */
-    private $relax = '';
-
-    /**
-     * We're likely to use XPath, so let's keep it global
-     * @var DOMXPath
-     */
-    protected $xpath;
-
-    /**
-     * The feed type we are parsing 
-     * @var string
-     */
-    public $version = 'RSS 0.9';
-
-    /**
-     * The class used to represent individual items 
-     * @var string
-     */
-    protected $itemClass = 'XML_Feed_Parser_RSS09Element';
-    
-    /**
-     * The element containing entries 
-     * @var string
-     */
-    protected $itemElement = 'item';
-
-    /**
-     * Here we map those elements we're not going to handle individually
-     * to the constructs they are. The optional second parameter in the array
-     * tells the parser whether to 'fall back' (not apt. at the feed level) or
-     * fail if the element is missing. If the parameter is not set, the function
-     * will simply return false and leave it to the client to decide what to do.
-     * @var array
-     */
-    protected $map = array(
-        'title' => array('Text'),
-        'link' => array('Text'),
-        'description' => array('Text'),
-        'image' => array('Image'),
-        'textinput' => array('TextInput'));
-
-    /**
-     * Here we map some elements to their atom equivalents. This is going to be
-     * quite tricky to pull off effectively (and some users' methods may vary)
-     * but is worth trying. The key is the atom version, the value is RSS2.
-     * @var array
-     */
-    protected $compatMap = array(
-        'title' => array('title'),
-        'link' => array('link'),
-        'subtitle' => array('description'));
-
-    /**
-     * We will be working with multiple namespaces and it is useful to 
-     * keep them together 
-     * @var array
-     */
-    protected $namespaces = array(
-        'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
-
-    /**
-     * Our constructor does nothing more than its parent.
-     * 
-     * @todo    RelaxNG validation
-     * @param    DOMDocument    $xml    A DOM object representing the feed
-     * @param    bool (optional) $string    Whether or not to validate this feed
-     */
-    function __construct(DOMDocument $model, $strict = false)
-    {
-        $this->model = $model;
-
-        $this->xpath = new DOMXPath($model);
-        foreach ($this->namespaces as $key => $value) {
-            $this->xpath->registerNamespace($key, $value);
-        }            
-        $this->numberEntries = $this->count('item');
-    }
-
-    /**
-     * Included for compatibility -- will not work with RSS 0.9
-     *
-     * This is not something that will work with RSS0.9 as it does not have
-     * clear restrictions on the global uniqueness of IDs.
-     *
-     * @param    string    $id    any valid ID.
-     * @return    false
-     */
-    function getEntryById($id)
-    {
-        return false;        
-    }
-
-    /**
-     * Get details of the image associated with the feed.
-     *
-     * @return  array|false an array simply containing the child elements
-     */
-    protected function getImage()
-    {
-        $images = $this->model->getElementsByTagName('image');
-        if ($images->length > 0) {
-            $image = $images->item(0);
-            $details = array();
-            if ($image->hasChildNodes()) {
-                $details = array(
-                    'title' => $image->getElementsByTagName('title')->item(0)->value,
-                    'link' => $image->getElementsByTagName('link')->item(0)->value,
-                    'url' => $image->getElementsByTagName('url')->item(0)->value);
-            } else {
-                $details = array('title' => false,
-                    'link' => false,
-                    'url' => $image->attributes->getNamedItem('resource')->nodeValue);
-            }
-            $details = array_merge($details, 
-                array('description' => false, 'height' => false, 'width' => false));
-            if (! empty($details)) {
-                return $details;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * The textinput element is little used, but in the interests of
-     * completeness we will support it.
-     *
-     * @return  array|false
-     */
-    protected function getTextInput()
-    {
-        $inputs = $this->model->getElementsByTagName('textinput');
-        if ($inputs->length > 0) {
-            $input = $inputs->item(0);
-            $results = array();
-            $results['title'] = isset(
-                $input->getElementsByTagName('title')->item(0)->value) ? 
-                $input->getElementsByTagName('title')->item(0)->value : null;
-            $results['description'] = isset(
-                $input->getElementsByTagName('description')->item(0)->value) ? 
-                $input->getElementsByTagName('description')->item(0)->value : null;
-            $results['name'] = isset(
-                $input->getElementsByTagName('name')->item(0)->value) ? 
-                $input->getElementsByTagName('name')->item(0)->value : null;
-            $results['link'] = isset(
-                   $input->getElementsByTagName('link')->item(0)->value) ? 
-                   $input->getElementsByTagName('link')->item(0)->value : null;
-            if (empty($results['link']) && 
-                $input->attributes->getNamedItem('resource')) {
-                $results['link'] = $input->attributes->getNamedItem('resource')->nodeValue;
-            }
-            if (! empty($results)) {
-                return $results;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Get details of a link from the feed.
-     *
-     * In RSS1 a link is a text element but in order to ensure that we resolve
-     * URLs properly we have a special function for them.
-     *
-     * @return  string
-     */
-    function getLink($offset = 0, $attribute = 'href', $params = false)
-    {
-        $links = $this->model->getElementsByTagName('link');
-        if ($links->length <= $offset) {
-            return false;
-        }
-        $link = $links->item($offset);
-        return $this->addBase($link->nodeValue, $link);
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php
deleted file mode 100755 (executable)
index d41f36e..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS0.9 Element class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS09Element.php,v 1.4 2006/06/30 17:41:56 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/*
- * This class provides support for RSS 0.9 entries. It will usually be called by
- * XML_Feed_Parser_RSS09 with which it shares many methods.
- *
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS09Element extends XML_Feed_Parser_RSS09
-{
-    /**
-     * This will be a reference to the parent object for when we want
-     * to use a 'fallback' rule 
-     * @var XML_Feed_Parser_RSS09
-     */
-    protected $parent;
-
-    /**
-     * Our specific element map 
-     * @var array
-     */
-    protected $map = array(
-        'title' => array('Text'),
-        'link' => array('Link'));
-
-    /**
-     * Store useful information for later.
-     *
-     * @param   DOMElement  $element - this item as a DOM element
-     * @param   XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
-     */
-    function __construct(DOMElement $element, $parent, $xmlBase = '')
-    {
-        $this->model = $element;
-        $this->parent = $parent;
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php
deleted file mode 100755 (executable)
index 60c9938..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1 class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS1.php,v 1.10 2006/07/27 13:52:05 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS1.0 feeds.
- * 
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- * @todo    Find a Relax NG URI we can use
- */
-class XML_Feed_Parser_RSS1 extends XML_Feed_Parser_Type
-{
-    /**
-     * The URI of the RelaxNG schema used to (optionally) validate the feed 
-     * @var string
-     */
-    private $relax = 'rss10.rnc';
-
-    /**
-     * We're likely to use XPath, so let's keep it global
-     * @var DOMXPath
-     */
-    protected $xpath;
-
-    /**
-     * The feed type we are parsing 
-     * @var string
-     */
-    public $version = 'RSS 1.0';
-
-    /**
-     * The class used to represent individual items 
-     * @var string
-     */
-    protected $itemClass = 'XML_Feed_Parser_RSS1Element';
-    
-    /**
-     * The element containing entries 
-     * @var string
-     */
-    protected $itemElement = 'item';
-
-    /**
-     * Here we map those elements we're not going to handle individually
-     * to the constructs they are. The optional second parameter in the array
-     * tells the parser whether to 'fall back' (not apt. at the feed level) or
-     * fail if the element is missing. If the parameter is not set, the function
-     * will simply return false and leave it to the client to decide what to do.
-     * @var array
-     */
-    protected $map = array(
-        'title' => array('Text'),
-        'link' => array('Text'),
-        'description' => array('Text'),
-        'image' => array('Image'),
-        'textinput' => array('TextInput'),
-        'updatePeriod' => array('Text'),
-        'updateFrequency' => array('Text'),
-        'updateBase' => array('Date'),
-        'rights' => array('Text'), # dc:rights
-        'description' => array('Text'), # dc:description
-        'creator' => array('Text'), # dc:creator
-        'publisher' => array('Text'), # dc:publisher
-        'contributor' => array('Text'), # dc:contributor
-        'date' => array('Date') # dc:contributor
-        );
-
-    /**
-     * Here we map some elements to their atom equivalents. This is going to be
-     * quite tricky to pull off effectively (and some users' methods may vary)
-     * but is worth trying. The key is the atom version, the value is RSS2.
-     * @var array
-     */
-    protected $compatMap = array(
-        'title' => array('title'),
-        'link' => array('link'),
-        'subtitle' => array('description'),
-        'author' => array('creator'),
-        'updated' => array('date'));
-
-    /**
-     * We will be working with multiple namespaces and it is useful to 
-     * keep them together 
-     * @var array
-     */
-    protected $namespaces = array(
-        'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
-        'rss' => 'http://purl.org/rss/1.0/',
-        'dc' => 'http://purl.org/rss/1.0/modules/dc/',
-        'content' => 'http://purl.org/rss/1.0/modules/content/',
-        'sy' => 'http://web.resource.org/rss/1.0/modules/syndication/');
-
-    /**
-     * Our constructor does nothing more than its parent.
-     * 
-     * @param    DOMDocument    $xml    A DOM object representing the feed
-     * @param    bool (optional) $string    Whether or not to validate this feed
-     */
-    function __construct(DOMDocument $model, $strict = false)
-    {
-        $this->model = $model;
-        if ($strict) {
-            $validate = $this->model->relaxNGValidate(self::getSchemaDir . 
-                DIRECTORY_SEPARATOR . $this->relax);
-            if (! $validate) {
-                throw new XML_Feed_Parser_Exception('Failed required validation');
-            }
-        }
-
-        $this->xpath = new DOMXPath($model);
-        foreach ($this->namespaces as $key => $value) {
-            $this->xpath->registerNamespace($key, $value);
-        }
-        $this->numberEntries = $this->count('item');
-    }
-
-    /**
-     * Allows retrieval of an entry by ID where the rdf:about attribute is used
-     *
-     * This is not really something that will work with RSS1 as it does not have
-     * clear restrictions on the global uniqueness of IDs. We will employ the
-     * _very_ hit and miss method of selecting entries based on the rdf:about
-     * attribute. If DOMXPath::evaluate is available, we also use that to store 
-     * a reference to the entry in the array used by getEntryByOffset so that 
-     * method does not have to seek out the entry if it's requested that way.
-     *
-     * @param    string    $id    any valid ID.
-     * @return    XML_Feed_Parser_RSS1Element
-     */
-    function getEntryById($id)
-    {
-        if (isset($this->idMappings[$id])) {
-            return $this->entries[$this->idMappings[$id]];
-        }
-
-        $entries = $this->xpath->query("//rss:item[@rdf:about='$id']");
-        if ($entries->length > 0) {
-            $classname = $this->itemClass;
-            $entry = new $classname($entries->item(0), $this);
-            if (in_array('evaluate', get_class_methods($this->xpath))) {
-                $offset = $this->xpath->evaluate("count(preceding-sibling::rss:item)", $entries->item(0));
-                $this->entries[$offset] = $entry;
-            }
-            $this->idMappings[$id] = $entry;
-            return $entry;
-        }
-        return false;
-    }
-
-    /**
-     * Get details of the image associated with the feed.
-     *
-     * @return  array|false an array simply containing the child elements
-     */
-    protected function getImage()
-    {
-        $images = $this->model->getElementsByTagName('image');
-        if ($images->length > 0) {
-            $image = $images->item(0);
-            $details = array();
-            if ($image->hasChildNodes()) {
-                $details = array(
-                    'title' => $image->getElementsByTagName('title')->item(0)->value,
-                    'link' => $image->getElementsByTagName('link')->item(0)->value,
-                    'url' => $image->getElementsByTagName('url')->item(0)->value);
-            } else {
-                $details = array('title' => false,
-                    'link' => false,
-                    'url' => $image->attributes->getNamedItem('resource')->nodeValue);
-            }
-            $details = array_merge($details, array('description' => false, 'height' => false, 'width' => false));
-            if (! empty($details)) {
-                return $details;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * The textinput element is little used, but in the interests of
-     * completeness we will support it.
-     *
-     * @return  array|false
-     */
-    protected function getTextInput()
-    {
-        $inputs = $this->model->getElementsByTagName('textinput');
-        if ($inputs->length > 0) {
-            $input = $inputs->item(0);
-            $results = array();
-            $results['title'] = isset(
-                $input->getElementsByTagName('title')->item(0)->value) ? 
-                $input->getElementsByTagName('title')->item(0)->value : null;
-            $results['description'] = isset(
-                $input->getElementsByTagName('description')->item(0)->value) ? 
-                $input->getElementsByTagName('description')->item(0)->value : null;
-            $results['name'] = isset(
-                $input->getElementsByTagName('name')->item(0)->value) ? 
-                $input->getElementsByTagName('name')->item(0)->value : null;
-            $results['link'] = isset(
-                   $input->getElementsByTagName('link')->item(0)->value) ? 
-                   $input->getElementsByTagName('link')->item(0)->value : null;
-            if (empty($results['link']) and 
-                $input->attributes->getNamedItem('resource')) {
-                $results['link'] = 
-                    $input->attributes->getNamedItem('resource')->nodeValue;
-            }
-            if (! empty($results)) {
-                return $results;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Employs various techniques to identify the author
-     *
-     * Dublin Core provides the dc:creator, dc:contributor, and dc:publisher
-     * elements for defining authorship in RSS1. We will try each of those in
-     * turn in order to simulate the atom author element and will return it
-     * as text.
-     *
-     * @return  array|false
-     */
-    function getAuthor()
-    {
-        $options = array('creator', 'contributor', 'publisher');
-        foreach ($options as $element) {
-            $test = $this->model->getElementsByTagName($element);
-            if ($test->length > 0) {
-                return $test->item(0)->value;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Retrieve a link
-     * 
-     * In RSS1 a link is a text element but in order to ensure that we resolve
-     * URLs properly we have a special function for them.
-     *
-     * @return  string
-     */
-    function getLink($offset = 0, $attribute = 'href', $params = false)
-    {
-        $links = $this->model->getElementsByTagName('link');
-        if ($links->length <= $offset) {
-            return false;
-        }
-        $link = $links->item($offset);
-        return $this->addBase($link->nodeValue, $link);
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php
deleted file mode 100755 (executable)
index 3cd1ef1..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1.1 class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS11.php,v 1.6 2006/07/27 13:52:05 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS1.1 feeds. RSS1.1 is documented at:
- * http://inamidst.com/rss1.1/
- * 
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- * @todo    Support for RDF:List
- * @todo    Ensure xml:lang is accessible to users
- */
-class XML_Feed_Parser_RSS11 extends XML_Feed_Parser_Type
-{
-    /**
-     * The URI of the RelaxNG schema used to (optionally) validate the feed 
-     * @var string
-     */
-    private $relax = 'rss11.rnc';
-
-    /**
-     * We're likely to use XPath, so let's keep it global
-     * @var DOMXPath
-     */
-    protected $xpath;
-
-    /**
-     * The feed type we are parsing 
-     * @var string
-     */
-    public $version = 'RSS 1.0';
-
-    /**
-     * The class used to represent individual items 
-     * @var string
-     */
-    protected $itemClass = 'XML_Feed_Parser_RSS1Element';
-    
-    /**
-     * The element containing entries 
-     * @var string
-     */
-    protected $itemElement = 'item';
-
-    /**
-     * Here we map those elements we're not going to handle individually
-     * to the constructs they are. The optional second parameter in the array
-     * tells the parser whether to 'fall back' (not apt. at the feed level) or
-     * fail if the element is missing. If the parameter is not set, the function
-     * will simply return false and leave it to the client to decide what to do.
-     * @var array
-     */
-    protected $map = array(
-        'title' => array('Text'),
-        'link' => array('Text'),
-        'description' => array('Text'),
-        'image' => array('Image'),
-        'updatePeriod' => array('Text'),
-        'updateFrequency' => array('Text'),
-        'updateBase' => array('Date'),
-        'rights' => array('Text'), # dc:rights
-        'description' => array('Text'), # dc:description
-        'creator' => array('Text'), # dc:creator
-        'publisher' => array('Text'), # dc:publisher
-        'contributor' => array('Text'), # dc:contributor
-        'date' => array('Date') # dc:contributor
-        );
-
-    /**
-     * Here we map some elements to their atom equivalents. This is going to be
-     * quite tricky to pull off effectively (and some users' methods may vary)
-     * but is worth trying. The key is the atom version, the value is RSS2.
-     * @var array
-     */
-    protected $compatMap = array(
-        'title' => array('title'),
-        'link' => array('link'),
-        'subtitle' => array('description'),
-        'author' => array('creator'),
-        'updated' => array('date'));
-
-    /**
-     * We will be working with multiple namespaces and it is useful to 
-     * keep them together. We will retain support for some common RSS1.0 modules
-     * @var array
-     */
-    protected $namespaces = array(
-        'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
-        'rss' => 'http://purl.org/net/rss1.1#',
-        'dc' => 'http://purl.org/rss/1.0/modules/dc/',
-        'content' => 'http://purl.org/rss/1.0/modules/content/',
-        'sy' => 'http://web.resource.org/rss/1.0/modules/syndication/');
-
-    /**
-     * Our constructor does nothing more than its parent.
-     * 
-     * @param    DOMDocument    $xml    A DOM object representing the feed
-     * @param    bool (optional) $string    Whether or not to validate this feed
-     */
-    function __construct(DOMDocument $model, $strict = false)
-    {
-        $this->model = $model;
-
-        if ($strict) {
-            $validate = $this->model->relaxNGValidate(self::getSchemaDir . 
-                DIRECTORY_SEPARATOR . $this->relax);
-            if (! $validate) {
-                throw new XML_Feed_Parser_Exception('Failed required validation');
-            }
-        }
-
-        $this->xpath = new DOMXPath($model);
-        foreach ($this->namespaces as $key => $value) {
-            $this->xpath->registerNamespace($key, $value);
-        }            
-        $this->numberEntries = $this->count('item');
-    }
-
-    /**
-     * Attempts to identify an element by ID given by the rdf:about attribute
-     *
-     * This is not really something that will work with RSS1.1 as it does not have
-     * clear restrictions on the global uniqueness of IDs. We will employ the
-     * _very_ hit and miss method of selecting entries based on the rdf:about
-     * attribute. Please note that this is even more hit and miss with RSS1.1 than
-     * with RSS1.0 since RSS1.1 does not require the rdf:about attribute for items.
-     *
-     * @param    string    $id    any valid ID.
-     * @return    XML_Feed_Parser_RSS1Element
-     */
-    function getEntryById($id)
-    {
-        if (isset($this->idMappings[$id])) {
-            return $this->entries[$this->idMappings[$id]];
-        }
-
-        $entries = $this->xpath->query("//rss:item[@rdf:about='$id']");
-        if ($entries->length > 0) {
-            $classname = $this->itemClass;
-            $entry = new $classname($entries->item(0), $this);
-            return $entry;
-        }
-        return false;
-    }
-
-    /**
-     * Get details of the image associated with the feed.
-     *
-     * @return  array|false an array simply containing the child elements
-     */
-    protected function getImage()
-    {
-        $images = $this->model->getElementsByTagName('image');
-        if ($images->length > 0) {
-            $image = $images->item(0);
-            $details = array();
-            if ($image->hasChildNodes()) {
-                $details = array(
-                    'title' => $image->getElementsByTagName('title')->item(0)->value,
-                    'url' => $image->getElementsByTagName('url')->item(0)->value);
-                if ($image->getElementsByTagName('link')->length > 0) {
-                    $details['link'] = 
-                        $image->getElementsByTagName('link')->item(0)->value;
-                }
-            } else {
-                $details = array('title' => false,
-                    'link' => false,
-                    'url' => $image->attributes->getNamedItem('resource')->nodeValue);
-            }
-            $details = array_merge($details, 
-                array('description' => false, 'height' => false, 'width' => false));
-            if (! empty($details)) {
-                return $details;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * The textinput element is little used, but in the interests of
-     * completeness we will support it.
-     *
-     * @return  array|false
-     */
-    protected function getTextInput()
-    {
-        $inputs = $this->model->getElementsByTagName('textinput');
-        if ($inputs->length > 0) {
-            $input = $inputs->item(0);
-            $results = array();
-            $results['title'] = isset(
-                $input->getElementsByTagName('title')->item(0)->value) ? 
-                $input->getElementsByTagName('title')->item(0)->value : null;
-            $results['description'] = isset(
-                $input->getElementsByTagName('description')->item(0)->value) ? 
-                $input->getElementsByTagName('description')->item(0)->value : null;
-            $results['name'] = isset(
-                $input->getElementsByTagName('name')->item(0)->value) ? 
-                $input->getElementsByTagName('name')->item(0)->value : null;
-            $results['link'] = isset(
-                   $input->getElementsByTagName('link')->item(0)->value) ? 
-                   $input->getElementsByTagName('link')->item(0)->value : null;
-            if (empty($results['link']) and 
-                $input->attributes->getNamedItem('resource')) {
-                $results['link'] = $input->attributes->getNamedItem('resource')->nodeValue;
-            }
-            if (! empty($results)) {
-                return $results;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Attempts to discern authorship
-     *
-     * Dublin Core provides the dc:creator, dc:contributor, and dc:publisher
-     * elements for defining authorship in RSS1. We will try each of those in
-     * turn in order to simulate the atom author element and will return it
-     * as text.
-     *
-     * @return  array|false
-     */
-    function getAuthor()
-    {
-        $options = array('creator', 'contributor', 'publisher');
-        foreach ($options as $element) {
-            $test = $this->model->getElementsByTagName($element);
-            if ($test->length > 0) {
-                return $test->item(0)->value;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Retrieve a link
-     *
-     * In RSS1 a link is a text element but in order to ensure that we resolve
-     * URLs properly we have a special function for them.
-     *
-     * @return  string
-     */
-    function getLink($offset = 0, $attribute = 'href', $params = false)
-    {
-        $links = $this->model->getElementsByTagName('link');
-        if ($links->length <= $offset) {
-            return false;
-        }
-        $link = $links->item($offset);
-        return $this->addBase($link->nodeValue, $link);
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php
deleted file mode 100755 (executable)
index 75918be..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1 Element class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS11Element.php,v 1.4 2006/06/30 17:41:56 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/*
- * This class provides support for RSS 1.1 entries. It will usually be called by
- * XML_Feed_Parser_RSS11 with which it shares many methods.
- *
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS11Element extends XML_Feed_Parser_RSS11
-{
-    /**
-     * This will be a reference to the parent object for when we want
-     * to use a 'fallback' rule 
-     * @var XML_Feed_Parser_RSS1
-     */
-    protected $parent;
-
-    /**
-     * Our specific element map 
-     * @var array
-     */
-    protected $map = array(
-        'id' => array('Id'),
-        'title' => array('Text'),
-        'link' => array('Link'),
-        'description' => array('Text'), # or dc:description
-        'category' => array('Category'),
-        'rights' => array('Text'), # dc:rights
-        'creator' => array('Text'), # dc:creator
-        'publisher' => array('Text'), # dc:publisher
-        'contributor' => array('Text'), # dc:contributor
-        'date' => array('Date'), # dc:date
-        'content' => array('Content')
-        );
-
-    /**
-     * Here we map some elements to their atom equivalents. This is going to be
-     * quite tricky to pull off effectively (and some users' methods may vary)
-     * but is worth trying. The key is the atom version, the value is RSS1.
-     * @var array
-     */
-    protected $compatMap = array(
-        'content' => array('content'),
-        'updated' => array('lastBuildDate'),
-        'published' => array('pubdate'),
-        'subtitle' => array('description'),
-        'updated' => array('date'),
-        'author' => array('creator'),
-        'contributor' => array('contributor')
-    );
-
-    /**
-     * Store useful information for later.
-     *
-     * @param   DOMElement  $element - this item as a DOM element
-     * @param   XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
-     */
-    function __construct(DOMElement $element, $parent, $xmlBase = '')
-    {
-        $this->model = $element;
-        $this->parent = $parent;
-    }
-
-    /**
-     * If an rdf:about attribute is specified, return that as an ID
-     *
-     * There is no established way of showing an ID for an RSS1 entry. We will 
-     * simulate it using the rdf:about attribute of the entry element. This cannot
-     * be relied upon for unique IDs but may prove useful.
-     *
-     * @return  string|false
-     */
-    function getId()
-    {
-        if ($this->model->attributes->getNamedItem('about')) {
-            return $this->model->attributes->getNamedItem('about')->nodeValue;
-        }
-        return false;
-    }
-
-    /**
-     * Return the entry's content
-     *
-     * The official way to include full content in an RSS1 entry is to use
-     * the content module's element 'encoded'. Often, however, the 'description'
-     * element is used instead. We will offer that as a fallback.
-     *
-     * @return  string|false
-     */
-    function getContent()
-    {
-        $options = array('encoded', 'description');
-        foreach ($options as $element) {
-            $test = $this->model->getElementsByTagName($element);
-            if ($test->length == 0) {
-                continue;
-            }
-            if ($test->item(0)->hasChildNodes()) {
-                $value = '';
-                foreach ($test->item(0)->childNodes as $child) {
-                    if ($child instanceof DOMText) {
-                        $value .= $child->nodeValue;
-                    } else {
-                        $simple = simplexml_import_dom($child);
-                        $value .= $simple->asXML();
-                    }
-                }
-                return $value;
-            } else if ($test->length > 0) {
-                return $test->item(0)->nodeValue;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * How RSS1.1 should support for enclosures is not clear. For now we will return
-     * false.
-     *
-     * @return  false
-     */
-    function getEnclosure()
-    {
-        return false;
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php
deleted file mode 100755 (executable)
index 8e36d5a..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1 Element class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS1Element.php,v 1.6 2006/06/30 17:41:56 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/*
- * This class provides support for RSS 1.0 entries. It will usually be called by
- * XML_Feed_Parser_RSS1 with which it shares many methods.
- *
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS1Element extends XML_Feed_Parser_RSS1
-{
-    /**
-     * This will be a reference to the parent object for when we want
-     * to use a 'fallback' rule 
-     * @var XML_Feed_Parser_RSS1
-     */
-    protected $parent;
-
-    /**
-     * Our specific element map 
-     * @var array
-     */
-    protected $map = array(
-        'id' => array('Id'),
-        'title' => array('Text'),
-        'link' => array('Link'),
-        'description' => array('Text'), # or dc:description
-        'category' => array('Category'),
-        'rights' => array('Text'), # dc:rights
-        'creator' => array('Text'), # dc:creator
-        'publisher' => array('Text'), # dc:publisher
-        'contributor' => array('Text'), # dc:contributor
-        'date' => array('Date'), # dc:date
-        'content' => array('Content')
-        );
-
-    /**
-     * Here we map some elements to their atom equivalents. This is going to be
-     * quite tricky to pull off effectively (and some users' methods may vary)
-     * but is worth trying. The key is the atom version, the value is RSS1.
-     * @var array
-     */
-    protected $compatMap = array(
-        'content' => array('content'),
-        'updated' => array('lastBuildDate'),
-        'published' => array('pubdate'),
-        'subtitle' => array('description'),
-        'updated' => array('date'),
-        'author' => array('creator'),
-        'contributor' => array('contributor')
-    );
-
-    /**
-     * Store useful information for later.
-     *
-     * @param   DOMElement  $element - this item as a DOM element
-     * @param   XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
-     */
-    function __construct(DOMElement $element, $parent, $xmlBase = '')
-    {
-        $this->model = $element;
-        $this->parent = $parent;
-    }
-
-    /**
-     * If an rdf:about attribute is specified, return it as an ID
-     *
-     * There is no established way of showing an ID for an RSS1 entry. We will 
-     * simulate it using the rdf:about attribute of the entry element. This cannot
-     * be relied upon for unique IDs but may prove useful.
-     *
-     * @return  string|false
-     */
-    function getId()
-    {
-        if ($this->model->attributes->getNamedItem('about')) {
-            return $this->model->attributes->getNamedItem('about')->nodeValue;
-        }
-        return false;
-    }
-
-    /**
-     * How RSS1 should support for enclosures is not clear. For now we will return
-     * false.
-     *
-     * @return  false
-     */
-    function getEnclosure()
-    {
-        return false;
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php
deleted file mode 100644 (file)
index 0936bd2..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Class representing feed-level data for an RSS2 feed
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS2.php,v 1.12 2008/03/08 18:16:45 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS2 feeds.
- * 
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS2 extends XML_Feed_Parser_Type
-{
-    /**
-     * The URI of the RelaxNG schema used to (optionally) validate the feed
-     * @var string
-     */
-    private $relax = 'rss20.rnc';
-
-    /**
-     * We're likely to use XPath, so let's keep it global
-     * @var DOMXPath
-     */
-    protected $xpath;
-
-    /**
-     * The feed type we are parsing
-     * @var string
-     */
-    public $version = 'RSS 2.0';
-
-    /**
-     * The class used to represent individual items
-     * @var string
-     */     
-    protected $itemClass = 'XML_Feed_Parser_RSS2Element';
-    
-    /**
-     * The element containing entries 
-     * @var string
-     */
-    protected $itemElement = 'item';
-
-    /**
-     * Here we map those elements we're not going to handle individually
-     * to the constructs they are. The optional second parameter in the array
-     * tells the parser whether to 'fall back' (not apt. at the feed level) or
-     * fail if the element is missing. If the parameter is not set, the function
-     * will simply return false and leave it to the client to decide what to do.
-     * @var array
-     */
-    protected $map = array(
-        'ttl' => array('Text'),
-        'pubDate' => array('Date'),
-        'lastBuildDate' => array('Date'),
-        'title' => array('Text'),
-        'link' => array('Link'),
-        'description' => array('Text'),
-        'language' => array('Text'),
-        'copyright' => array('Text'),
-        'managingEditor' => array('Text'),
-        'webMaster' => array('Text'),
-        'category' => array('Text'),
-        'generator' => array('Text'),
-        'docs' => array('Text'),
-        'ttl' => array('Text'),
-        'image' => array('Image'),
-        'skipDays' => array('skipDays'),
-        'skipHours' => array('skipHours'));
-
-    /**
-     * Here we map some elements to their atom equivalents. This is going to be
-     * quite tricky to pull off effectively (and some users' methods may vary)
-     * but is worth trying. The key is the atom version, the value is RSS2.
-     * @var array
-     */
-    protected $compatMap = array(
-        'title' => array('title'),
-        'rights' => array('copyright'),
-        'updated' => array('lastBuildDate'),
-        'subtitle' => array('description'),
-        'date' => array('pubDate'),
-        'author' => array('managingEditor'));
-
-    protected $namespaces = array(
-        'dc' => 'http://purl.org/rss/1.0/modules/dc/',
-        'content' => 'http://purl.org/rss/1.0/modules/content/');
-
-    /**
-     * Our constructor does nothing more than its parent.
-     * 
-     * @param    DOMDocument    $xml    A DOM object representing the feed
-     * @param    bool (optional) $string    Whether or not to validate this feed
-     */
-    function __construct(DOMDocument $model, $strict = false)
-    {
-        $this->model = $model;
-
-        if ($strict) {
-            if (! $this->model->relaxNGValidate($this->relax)) {
-                throw new XML_Feed_Parser_Exception('Failed required validation');
-            }
-        }
-
-        $this->xpath = new DOMXPath($this->model);
-        foreach ($this->namespaces as $key => $value) {
-            $this->xpath->registerNamespace($key, $value);
-        }
-        $this->numberEntries = $this->count('item');
-    }
-
-    /**
-     * Retrieves an entry by ID, if the ID is specified with the guid element
-     *
-     * This is not really something that will work with RSS2 as it does not have
-     * clear restrictions on the global uniqueness of IDs. But we can emulate
-     * it by allowing access based on the 'guid' element. If DOMXPath::evaluate
-     * is available, we also use that to store a reference to the entry in the array
-     * used by getEntryByOffset so that method does not have to seek out the entry
-     * if it's requested that way.
-     *
-     * @param    string    $id    any valid ID.
-     * @return    XML_Feed_Parser_RSS2Element
-     */
-    function getEntryById($id)
-    {
-        if (isset($this->idMappings[$id])) {
-            return $this->entries[$this->idMappings[$id]];
-        }
-
-        $entries = $this->xpath->query("//item[guid='$id']");
-        if ($entries->length > 0) {
-            $entry = new $this->itemElement($entries->item(0), $this);
-            if (in_array('evaluate', get_class_methods($this->xpath))) {
-                $offset = $this->xpath->evaluate("count(preceding-sibling::item)", $entries->item(0));
-                $this->entries[$offset] = $entry;
-            }
-            $this->idMappings[$id] = $entry;
-            return $entry;
-        }        
-    }
-
-    /**
-     * Get a category from the element
-     *
-     * The category element is a simple text construct which can occur any number
-     * of times. We allow access by offset or access to an array of results.
-     *
-     * @param    string    $call    for compatibility with our overloading
-     * @param   array $arguments - arg 0 is the offset, arg 1 is whether to return as array
-     * @return  string|array|false
-     */
-    function getCategory($call, $arguments = array())
-    {
-        $categories = $this->model->getElementsByTagName('category');
-        $offset = empty($arguments[0]) ? 0 : $arguments[0];
-        $array = empty($arguments[1]) ? false : true;
-        if ($categories->length <= $offset) {
-            return false;
-        }
-        if ($array) {
-            $list = array();
-            foreach ($categories as $category) {
-                array_push($list, $category->nodeValue);
-            }
-            return $list;
-        }
-        return $categories->item($offset)->nodeValue;
-    }
-
-    /**
-     * Get details of the image associated with the feed.
-     *
-     * @return  array|false an array simply containing the child elements
-     */
-    protected function getImage()
-    {
-        $images = $this->xpath->query("//image");
-        if ($images->length > 0) {
-            $image = $images->item(0);
-            $desc = $image->getElementsByTagName('description');
-            $description = $desc->length ? $desc->item(0)->nodeValue : false;
-            $heigh = $image->getElementsByTagName('height'); 
-            $height = $heigh->length ? $heigh->item(0)->nodeValue : false;
-            $widt = $image->getElementsByTagName('width'); 
-            $width = $widt->length ? $widt->item(0)->nodeValue : false;
-            return array(
-                'title' => $image->getElementsByTagName('title')->item(0)->nodeValue,
-                'link' => $image->getElementsByTagName('link')->item(0)->nodeValue,
-                'url' => $image->getElementsByTagName('url')->item(0)->nodeValue,
-                'description' => $description,
-                'height' => $height,
-                'width' => $width);
-        }
-        return false;
-    }
-
-    /**
-     * The textinput element is little used, but in the interests of
-     * completeness...
-     *
-     * @return  array|false
-     */
-    function getTextInput()
-    {
-        $inputs = $this->model->getElementsByTagName('input');
-        if ($inputs->length > 0) {
-            $input = $inputs->item(0);
-            return array(
-                'title' => $input->getElementsByTagName('title')->item(0)->value,
-                'description' => 
-                    $input->getElementsByTagName('description')->item(0)->value,
-                'name' => $input->getElementsByTagName('name')->item(0)->value,
-                'link' => $input->getElementsByTagName('link')->item(0)->value);
-        }
-        return false;
-    }
-
-    /**
-     * Utility function for getSkipDays and getSkipHours
-     *
-     * This is a general function used by both getSkipDays and getSkipHours. It simply
-     * returns an array of the values of the children of the appropriate tag.
-     *
-     * @param   string      $tagName    The tag name (getSkipDays or getSkipHours)
-     * @return  array|false
-     */
-    protected function getSkips($tagName)
-    {
-        $hours = $this->model->getElementsByTagName($tagName);
-        if ($hours->length == 0) {
-            return false;
-        }
-        $skipHours = array();
-        foreach($hours->item(0)->childNodes as $hour) {
-            if ($hour instanceof DOMElement) {
-                array_push($skipHours, $hour->nodeValue);
-            }
-        }
-        return $skipHours;
-    }
-
-    /**
-     * Retrieve skipHours data
-     *
-     * The skiphours element provides a list of hours on which this feed should
-     * not be checked. We return an array of those hours (integers, 24 hour clock)
-     *
-     * @return  array
-     */    
-    function getSkipHours()
-    {
-        return $this->getSkips('skipHours');
-    }
-
-    /**
-     * Retrieve skipDays data
-     *
-     * The skipdays element provides a list of days on which this feed should
-     * not be checked. We return an array of those days.
-     *
-     * @return  array
-     */
-    function getSkipDays()
-    {
-        return $this->getSkips('skipDays');
-    }
-
-    /**
-     * Return content of the little-used 'cloud' element
-     *
-     * The cloud element is rarely used. It is designed to provide some details
-     * of a location to update the feed.
-     *
-     * @return  array   an array of the attributes of the element
-     */
-    function getCloud()
-    {
-        $cloud = $this->model->getElementsByTagName('cloud');
-        if ($cloud->length == 0) {
-            return false;
-        }
-        $cloudData = array();
-        foreach ($cloud->item(0)->attributes as $attribute) {
-            $cloudData[$attribute->name] = $attribute->value;
-        }
-        return $cloudData;
-    }
-    
-    /**
-     * Get link URL
-     *
-     * In RSS2 a link is a text element but in order to ensure that we resolve
-     * URLs properly we have a special function for them. We maintain the 
-     * parameter used by the atom getLink method, though we only use the offset
-     * parameter.
-     *
-     * @param   int     $offset The position of the link within the feed. Starts from 0
-     * @param   string  $attribute  The attribute of the link element required
-     * @param   array   $params An array of other parameters. Not used.
-     * @return  string
-     */
-    function getLink($offset, $attribute = 'href', $params = array())
-    {
-        $xPath = new DOMXPath($this->model);
-        $links = $xPath->query('//link');
-
-        if ($links->length <= $offset) {
-            return false;
-        }
-        $link = $links->item($offset);
-        return $this->addBase($link->nodeValue, $link);
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php
deleted file mode 100755 (executable)
index 6edf910..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Class representing entries in an RSS2 feed.
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: RSS2Element.php,v 1.11 2006/07/26 21:18:47 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class provides support for RSS 2.0 entries. It will usually be 
- * called by XML_Feed_Parser_RSS2 with which it shares many methods.
- *
- * @author    James Stewart <james@jystewart.net>
- * @version    Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS2Element extends XML_Feed_Parser_RSS2
-{
-    /**
-     * This will be a reference to the parent object for when we want
-     * to use a 'fallback' rule
-     * @var XML_Feed_Parser_RSS2
-     */
-    protected $parent;
-
-    /**
-     * Our specific element map 
-     * @var array
-     */
-    protected $map = array(
-        'title' => array('Text'),
-        'guid' => array('Guid'),
-        'description' => array('Text'),
-        'author' => array('Text'),
-        'comments' => array('Text'),
-        'enclosure' => array('Enclosure'),
-        'pubDate' => array('Date'),
-        'source' => array('Source'),
-        'link' => array('Text'),
-        'content' => array('Content'));
-
-    /**
-     * Here we map some elements to their atom equivalents. This is going to be
-     * quite tricky to pull off effectively (and some users' methods may vary)
-     * but is worth trying. The key is the atom version, the value is RSS2.
-     * @var array
-     */
-    protected $compatMap = array(
-        'id' => array('guid'),
-        'updated' => array('lastBuildDate'),
-        'published' => array('pubdate'),
-        'guidislink' => array('guid', 'ispermalink'),
-        'summary' => array('description'));
-
-    /**
-     * Store useful information for later.
-     *
-     * @param   DOMElement  $element - this item as a DOM element
-     * @param   XML_Feed_Parser_RSS2    $parent - the feed of which this is a member
-     */
-    function __construct(DOMElement $element, $parent, $xmlBase = '')
-    {
-        $this->model = $element;
-        $this->parent = $parent;
-    }
-
-    /**
-     * Get the value of the guid element, if specified
-     *
-     * guid is the closest RSS2 has to atom's ID. It is usually but not always a
-     * URI. The one attribute that RSS2 can posess is 'ispermalink' which specifies
-     * whether the guid is itself dereferencable. Use of guid is not obligatory,
-     * but is advisable. To get the guid you would call $item->id() (for atom
-     * compatibility) or $item->guid(). To check if this guid is a permalink call
-     * $item->guid("ispermalink").
-     *
-     * @param   string  $method - the method name being called
-     * @param   array   $params - parameters required
-     * @return  string  the guid or value of ispermalink
-     */
-    protected function getGuid($method, $params)
-    {
-        $attribute = (isset($params[0]) and $params[0] == 'ispermalink') ? 
-            true : false;
-        $tag = $this->model->getElementsByTagName('guid');
-        if ($tag->length > 0) {
-            if ($attribute) {
-                if ($tag->hasAttribute("ispermalink")) {
-                    return $tag->getAttribute("ispermalink");
-                }
-            }
-            return $tag->item(0)->nodeValue;
-        }
-        return false;
-    }
-
-    /**
-     * Access details of file enclosures
-     *
-     * The RSS2 spec is ambiguous as to whether an enclosure element must be
-     * unique in a given entry. For now we will assume it needn't, and allow
-     * for an offset.
-     *
-     * @param   string $method - the method being called
-     * @param   array   $parameters - we expect the first of these to be our offset
-     * @return  array|false
-     */
-    protected function getEnclosure($method, $parameters)
-    {
-        $encs = $this->model->getElementsByTagName('enclosure');
-        $offset = isset($parameters[0]) ? $parameters[0] : 0;
-        if ($encs->length > $offset) {
-            try {
-                if (! $encs->item($offset)->hasAttribute('url')) {
-                    return false;
-                }
-                $attrs = $encs->item($offset)->attributes;
-                return array(
-                    'url' => $attrs->getNamedItem('url')->value,
-                    'length' => $attrs->getNamedItem('length')->value,
-                    'type' => $attrs->getNamedItem('type')->value);
-            } catch (Exception $e) {
-                return false;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Get the entry source if specified
-     *
-     * source is an optional sub-element of item. Like atom:source it tells
-     * us about where the entry came from (eg. if it's been copied from another
-     * feed). It is not a rich source of metadata in the same way as atom:source
-     * and while it would be good to maintain compatibility by returning an
-     * XML_Feed_Parser_RSS2 element, it makes a lot more sense to return an array.
-     *
-     * @return array|false
-     */
-    protected function getSource()
-    {
-        $get = $this->model->getElementsByTagName('source');
-        if ($get->length) {
-            $source = $get->item(0);
-            $array = array(
-                'content' => $source->nodeValue);
-            foreach ($source->attributes as $attribute) {
-                $array[$attribute->name] = $attribute->value;
-            }
-            return $array;
-        }
-        return false;
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/Parser/Type.php b/plugins/FeedSub/extlib/XML/Feed/Parser/Type.php
deleted file mode 100644 (file)
index 7505261..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Abstract class providing common methods for XML_Feed_Parser feeds.
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category   XML
- * @package    XML_Feed_Parser
- * @author     James Stewart <james@jystewart.net>
- * @copyright  2005 James Stewart <james@jystewart.net>
- * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
- * @version    CVS: $Id: Type.php,v 1.25 2008/03/08 18:39:09 jystewart Exp $
- * @link       http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This abstract class provides some general methods that are likely to be
- * implemented exactly the same way for all feed types.
- *
- * @package XML_Feed_Parser
- * @author  James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- */
-abstract class XML_Feed_Parser_Type
-{
-    /**
-     * Where we store our DOM object for this feed 
-     * @var DOMDocument
-     */
-    public $model;
-
-    /**
-     * For iteration we'll want a count of the number of entries 
-     * @var int
-     */
-    public $numberEntries;
-
-    /**
-     * Where we store our entry objects once instantiated 
-     * @var array
-     */
-    public $entries = array();
-
-    /**
-     * Store mappings between entry IDs and their position in the feed
-     */
-    public $idMappings = array();
-
-    /**
-     * Proxy to allow use of element names as method names
-     *
-     * We are not going to provide methods for every entry type so this
-     * function will allow for a lot of mapping. We rely pretty heavily
-     * on this to handle our mappings between other feed types and atom.
-     *
-     * @param   string  $call - the method attempted
-     * @param   array   $arguments - arguments to that method
-     * @return  mixed
-     */
-    function __call($call, $arguments = array())
-    {
-        if (! is_array($arguments)) {
-            $arguments = array();
-        }
-
-        if (isset($this->compatMap[$call])) {
-            $tempMap = $this->compatMap;
-            $tempcall = array_pop($tempMap[$call]);
-            if (! empty($tempMap)) {
-                $arguments = array_merge($arguments, $tempMap[$call]);
-            }
-            $call = $tempcall;
-        }
-
-        /* To be helpful, we allow a case-insensitive search for this method */
-        if (! isset($this->map[$call])) {
-            foreach (array_keys($this->map) as $key) {
-                if (strtoupper($key) == strtoupper($call)) {
-                    $call = $key;
-                    break;
-                }
-            }
-        }
-
-        if (empty($this->map[$call])) {
-            return false;
-        }
-
-        $method = 'get' . $this->map[$call][0];
-        if ($method == 'getLink') {
-            $offset = empty($arguments[0]) ? 0 : $arguments[0];
-            $attribute = empty($arguments[1]) ? 'href' : $arguments[1];
-            $params = isset($arguments[2]) ? $arguments[2] : array();
-            return $this->getLink($offset, $attribute, $params);
-        }
-        if (method_exists($this, $method)) {
-            return $this->$method($call, $arguments);
-        }
-
-        return false;
-    }
-
-    /**
-     * Proxy to allow use of element names as attribute names
-     *
-     * For many elements variable-style access will be desirable. This function
-     * provides for that.
-     *
-     * @param   string  $value - the variable required
-     * @return  mixed
-     */
-    function __get($value)
-    {
-        return $this->__call($value, array());
-    }
-
-    /**
-     * Utility function to help us resolve xml:base values
-     *
-     * We have other methods which will traverse the DOM and work out the different
-     * xml:base declarations we need to be aware of. We then need to combine them.
-     * If a declaration starts with a protocol then we restart the string. If it 
-     * starts with a / then we add on to the domain name. Otherwise we simply tag 
-     * it on to the end.
-     *
-     * @param   string  $base - the base to add the link to
-     * @param   string  $link
-     */
-    function combineBases($base, $link)
-    {
-        if (preg_match('/^[A-Za-z]+:\/\//', $link)) {
-            return $link;
-        } else if (preg_match('/^\//', $link)) {
-            /* Extract domain and suffix link to that */
-            preg_match('/^([A-Za-z]+:\/\/.*)?\/*/', $base, $results);
-            $firstLayer = $results[0];
-            return $firstLayer . "/" . $link;
-        } else if (preg_match('/^\.\.\//', $base)) {
-            /* Step up link to find place to be */
-            preg_match('/^((\.\.\/)+)(.*)$/', $link, $bases);
-            $suffix = $bases[3];
-            $count = preg_match_all('/\.\.\//', $bases[1], $steps);
-            $url = explode("/", $base);
-            for ($i = 0; $i <= $count; $i++) {
-                array_pop($url);
-            }
-            return implode("/", $url) . "/" . $suffix;
-        } else if (preg_match('/^(?!\/$)/', $base)) {
-            $base = preg_replace('/(.*\/).*$/', '$1', $base)  ;
-            return $base . $link;
-        } else {
-            /* Just stick it on the end */
-            return $base . $link;
-        }
-    }
-
-    /**
-     * Determine whether we need to apply our xml:base rules
-     *
-     * Gets us the xml:base data and then processes that with regard
-     * to our current link.
-     *
-     * @param   string
-     * @param   DOMElement
-     * @return  string
-     */
-    function addBase($link, $element)
-    {
-        if (preg_match('/^[A-Za-z]+:\/\//', $link)) {
-            return $link;
-        }
-
-        return $this->combineBases($element->baseURI, $link);
-    }
-
-    /**
-     * Get an entry by its position in the feed, starting from zero
-     *
-     * As well as allowing the items to be iterated over we want to allow
-     * users to be able to access a specific entry. This is one of two ways of
-     * doing that, the other being by ID.
-     * 
-     * @param   int $offset
-     * @return  XML_Feed_Parser_RSS1Element
-     */
-    function getEntryByOffset($offset)
-    {
-        if (! isset($this->entries[$offset])) {
-            $entries = $this->model->getElementsByTagName($this->itemElement);
-            if ($entries->length > $offset) {
-                $xmlBase = $entries->item($offset)->baseURI;
-                $this->entries[$offset] = new $this->itemClass(
-                    $entries->item($offset), $this, $xmlBase);
-                if ($id = $this->entries[$offset]->id) {
-                    $this->idMappings[$id] = $this->entries[$offset];
-                }
-            } else {
-                throw new XML_Feed_Parser_Exception('No entries found');
-            }
-        }
-
-        return $this->entries[$offset];
-    }
-
-    /**
-     * Return a date in seconds since epoch.
-     *
-     * Get a date construct. We use PHP's strtotime to return it as a unix datetime, which
-     * is the number of seconds since 1970-01-01 00:00:00.
-     * 
-     * @link    http://php.net/strtotime
-     * @param    string    $method        The name of the date construct we want
-     * @param    array     $arguments    Included for compatibility with our __call usage
-     * @return    int|false datetime
-     */
-    protected function getDate($method, $arguments)
-    {
-        $time = $this->model->getElementsByTagName($method);
-        if ($time->length == 0 || empty($time->item(0)->nodeValue)) {
-            return false;
-        }
-        return strtotime($time->item(0)->nodeValue);
-    }
-
-    /**
-     * Get a text construct. 
-     *
-     * @param    string    $method    The name of the text construct we want
-     * @param    array     $arguments    Included for compatibility with our __call usage
-     * @return    string
-     */
-    protected function getText($method, $arguments = array())
-    {
-        $tags = $this->model->getElementsByTagName($method);
-        if ($tags->length > 0) {
-            $value = $tags->item(0)->nodeValue;
-            return $value;
-        }
-        return false;
-    }
-
-    /**
-     * Apply various rules to retrieve category data.
-     *
-     * There is no single way of declaring a category in RSS1/1.1 as there is in RSS2 
-     * and  Atom. Instead the usual approach is to use the dublin core namespace to 
-     * declare  categories. For example delicious use both: 
-     * <dc:subject>PEAR</dc:subject> and: <taxo:topics><rdf:Bag>
-     * <rdf:li resource="http://del.icio.us/tag/PEAR" /></rdf:Bag></taxo:topics>
-     * to declare a categorisation of 'PEAR'.
-     *
-     * We need to be sensitive to this where possible.
-     *
-     * @param    string    $call    for compatibility with our overloading
-     * @param   array $arguments - arg 0 is the offset, arg 1 is whether to return as array
-     * @return  string|array|false
-     */
-    protected function getCategory($call, $arguments)
-    {
-        $categories = $this->model->getElementsByTagName('subject');
-        $offset = empty($arguments[0]) ? 0 : $arguments[0];
-        $array = empty($arguments[1]) ? false : true;
-        if ($categories->length <= $offset) {
-            return false;
-        }
-        if ($array) {
-            $list = array();
-            foreach ($categories as $category) {
-                array_push($list, $category->nodeValue);
-            }
-            return $list;
-        }
-        return $categories->item($offset)->nodeValue;
-    }
-
-    /**
-     * Count occurrences of an element
-     *
-     * This function will tell us how many times the element $type
-     * appears at this level of the feed.
-     * 
-     * @param    string    $type    the element we want to get a count of
-     * @return    int
-     */
-    protected function count($type)
-    {
-        if ($tags = $this->model->getElementsByTagName($type)) {
-            return $tags->length;
-        }
-        return 0;
-    }
-
-    /**
-     * Part of our xml:base processing code
-     *
-     * We need a couple of methods to access XHTML content stored in feeds. 
-     * This is because we dereference all xml:base references before returning
-     * the element. This method handles the attributes.
-     *
-     * @param   DOMElement $node    The DOM node we are iterating over
-     * @return  string
-     */
-    function processXHTMLAttributes($node) {
-        $return = '';
-        foreach ($node->attributes as $attribute) {
-            if ($attribute->name == 'src' or $attribute->name == 'href') {
-                $attribute->value = $this->addBase(htmlentities($attribute->value, NULL, 'utf-8'), $attribute);
-            }
-            if ($attribute->name == 'base') {
-                continue;
-            }
-            $return .= $attribute->name . '="' . htmlentities($attribute->value, NULL, 'utf-8') .'" ';
-        }
-        if (! empty($return)) {
-            return ' ' . trim($return);
-        }
-        return '';
-    }
-
-    /**
-     * Convert HTML entities based on the current character set.
-     * 
-     * @param String
-     * @return String
-     */
-    function processEntitiesForNodeValue($node) 
-    {
-        if (function_exists('iconv')) {
-          $current_encoding = $node->ownerDocument->encoding;
-          $value = iconv($current_encoding, 'UTF-8', $node->nodeValue);
-        } else if ($current_encoding == 'iso-8859-1') {
-          $value = utf8_encode($node->nodeValue);
-        } else {
-          $value = $node->nodeValue;
-        }
-
-        $decoded = html_entity_decode($value, NULL, 'UTF-8');
-        return htmlentities($decoded, NULL, 'UTF-8');
-    }
-
-    /**
-     * Part of our xml:base processing code
-     *
-     * We need a couple of methods to access XHTML content stored in feeds. 
-     * This is because we dereference all xml:base references before returning
-     * the element. This method recurs through the tree descending from the node
-     * and builds our string.
-     *
-     * @param   DOMElement $node    The DOM node we are processing
-     * @return   string
-     */
-    function traverseNode($node)
-    {
-        $content = '';
-
-        /* Add the opening of this node to the content */
-        if ($node instanceof DOMElement) {
-            $content .= '<' . $node->tagName . 
-                $this->processXHTMLAttributes($node) . '>';
-        }
-
-        /* Process children */
-        if ($node->hasChildNodes()) {
-            foreach ($node->childNodes as $child) {
-                $content .= $this->traverseNode($child);
-            }
-        }
-
-        if ($node instanceof DOMText) {
-            $content .= $this->processEntitiesForNodeValue($node);
-        }
-
-        /* Add the closing of this node to the content */
-        if ($node instanceof DOMElement) {
-            $content .= '</' . $node->tagName . '>';
-        }
-
-        return $content;
-    }
-
-    /**
-     * Get content from RSS feeds (atom has its own implementation)
-     *
-     * The official way to include full content in an RSS1 entry is to use
-     * the content module's element 'encoded', and RSS2 feeds often duplicate that.
-     * Often, however, the 'description' element is used instead. We will offer that 
-     * as a fallback. Atom uses its own approach and overrides this method.
-     *
-     * @return  string|false
-     */
-    protected function getContent()
-    {
-        $options = array('encoded', 'description');
-        foreach ($options as $element) {
-            $test = $this->model->getElementsByTagName($element);
-            if ($test->length == 0) {
-                continue;
-            }
-            if ($test->item(0)->hasChildNodes()) {
-                $value = '';
-                foreach ($test->item(0)->childNodes as $child) {
-                    if ($child instanceof DOMText) {
-                        $value .= $child->nodeValue;
-                    } else {
-                        $simple = simplexml_import_dom($child);
-                        $value .= $simple->asXML();
-                    }
-                }
-                return $value;
-            } else if ($test->length > 0) {
-                return $test->item(0)->nodeValue;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks if this element has a particular child element.
-     *
-     * @param   String
-     * @param   Integer
-     * @return  bool
-     **/
-    function hasKey($name, $offset = 0)
-    {
-        $search = $this->model->getElementsByTagName($name);
-        return $search->length > $offset;
-    }
-
-    /**
-     * Return an XML serialization of the feed, should it be required. Most 
-     * users however, will already have a serialization that they used when 
-     * instantiating the object.
-     *
-     * @return    string    XML serialization of element
-     */    
-    function __toString()
-    {
-        $simple = simplexml_import_dom($this->model);
-        return $simple->asXML();
-    }
-    
-    /**
-     * Get directory holding RNG schemas. Method is based on that 
-     * found in Contact_AddressBook.
-     *
-     * @return string PEAR data directory.
-     * @access public
-     * @static
-     */
-    static function getSchemaDir()
-    {
-        require_once 'PEAR/Config.php';
-        $config = new PEAR_Config;
-        return $config->get('data_dir') . '/XML_Feed_Parser/schemas';
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml b/plugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml
deleted file mode 100755 (executable)
index 02e1c58..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<entry xmlns="http://www.w3.org/2005/Atom">
-    <title>Atom draft-07 snapshot</title>
-    <link rel="alternate" type="text/html" 
-     href="http://example.org/2005/04/02/atom"/>
-    <link rel='enclosure' type="audio/mpeg" length="1337"
-     href="http://example.org/audio/ph34r_my_podcast.mp3"/>
-    <id>tag:example.org,2003:3.2397</id>
-    <updated>2005-07-10T12:29:29Z</updated>
-    <published>2003-12-13T08:29:29-04:00</published>
-    <author>
-      <name>Mark Pilgrim</name>
-      <uri>http://example.org/</uri>
-      <email>f8dy@example.com</email>
-    </author>
-    <contributor>
-      <name>Sam Ruby</name>
-    </contributor>
-    <contributor>
-      <name>Joe Gregorio</name>
-    </contributor>
-    <content type="xhtml" xml:lang="en" 
-     xml:base="http://diveintomark.org/">
-      <div xmlns="http://www.w3.org/1999/xhtml">
-        <p><i>[Update: The Atom draft is finished.]</i></p>
-      </div>
-    </content>
-  </entry>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml b/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml
deleted file mode 100755 (executable)
index d181d2b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
-
- <title>Example Feed</title>
- <link href="http://example.org/"/>
- <updated>2003-12-13T18:30:02Z</updated>
- <author>
-   <name>John Doe</name>
- </author>
- <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
-
- <entry>
-   <title>Atom-Powered Robots Run Amok</title>
-   <link href="http://example.org/2003/12/13/atom03"/>
-   <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
-   <updated>2003-12-13T18:30:02Z</updated>
-   <summary>Some text.</summary>
- </entry>
-
-</feed>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml b/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml
deleted file mode 100755 (executable)
index 98abf9d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-   <feed xmlns="http://www.w3.org/2005/Atom">
-     <title type="text">dive into mark</title>
-     <subtitle type="html">
-       A &lt;em&gt;lot&lt;/em&gt; of effort
-       went into making this effortless
-     </subtitle>
-     <updated>2005-07-31T12:29:29Z</updated>
-     <id>tag:example.org,2003:3</id>
-     <link rel="alternate" type="text/html"
-      hreflang="en" href="http://example.org/"/>
-     <link rel="self" type="application/atom+xml"
-      href="http://example.org/feed.atom"/>
-     <rights>Copyright (c) 2003, Mark Pilgrim</rights>
-     <generator uri="http://www.example.com/" version="1.0">
-       Example Toolkit
-     </generator>
-     <entry>
-       <title>Atom draft-07 snapshot</title>
-       <link rel="alternate" type="text/html"
-        href="http://example.org/2005/04/02/atom"/>
-       <link rel='enclosure' type="audio/mpeg" length="1337"
-        href="http://example.org/audio/ph34r_my_podcast.mp3"/>
-       <id>tag:example.org,2003:3.2397</id>
-       <updated>2005-07-31T12:29:29Z</updated>
-       <published>2003-12-13T08:29:29-04:00</published>
-       <author>
-         <name>Mark Pilgrim</name>
-         <uri>http://example.org/</uri>
-         <email>f8dy@example.com</email>
-       </author>
-       <contributor>
-         <name>Sam Ruby</name>
-       </contributor>
-       <contributor>
-         <name>Joe Gregorio</name>
-       </contributor>
-       <content type="xhtml" xml:lang="en"
-        xml:base="http://diveintomark.org/">
-         <div xmlns="http://www.w3.org/1999/xhtml">
-           <p><i>[Update: The Atom draft is finished.]</i></p>
-         </div>
-       </content>
-     </entry>
-   </feed>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/delicious.feed b/plugins/FeedSub/extlib/XML/Feed/samples/delicious.feed
deleted file mode 100755 (executable)
index 32f9fa4..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<rdf:RDF
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns="http://purl.org/rss/1.0/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
- xmlns:admin="http://webns.net/mvcb/"
->
-<channel rdf:about="http://del.icio.us/tag/greenbelt">
-<title>del.icio.us/tag/greenbelt</title>
-<link>http://del.icio.us/tag/greenbelt</link>
-<description>Text</description>
-<items>
- <rdf:Seq>
-  <rdf:li rdf:resource="http://www.greenbelt.org.uk/" />
-  <rdf:li rdf:resource="http://www.greenbelt.org.uk/" />
-  <rdf:li rdf:resource="http://www.natuerlichwien.at/rundumadum/dergruenguertel/" />
-  <rdf:li rdf:resource="http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars" />
-  <rdf:li rdf:resource="http://www.greenbelt.ca/home.htm" />
-  <rdf:li rdf:resource="http://pipwilsonbhp.blogspot.com/" />
-  <rdf:li rdf:resource="http://maggidawn.typepad.com/maggidawn/" />
-  <rdf:li rdf:resource="http://www.johndavies.org/" />
-  <rdf:li rdf:resource="http://jonnybaker.blogs.com/" />
- </rdf:Seq>
-</items>
-</channel>
-
-<item rdf:about="http://www.greenbelt.org.uk/">
-<dc:title>Greenbelt - Homepage Section</dc:title>
-<link>http://www.greenbelt.org.uk/</link>
-<dc:creator>jonnybaker</dc:creator>
-<dc:date>2005-05-16T16:30:38Z</dc:date>
-<dc:subject>greenbelt</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.greenbelt.org.uk/">
-<title>Greenbelt festival (uk)</title>
-<link>http://www.greenbelt.org.uk/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2005-05-14T18:19:40Z</dc:date>
-<dc:subject>audiology festival gigs greenbelt</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/gigs" />
-    <rdf:li resource="http://del.icio.us/tag/audiology" />
-    <rdf:li resource="http://del.icio.us/tag/festival" />
-    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.natuerlichwien.at/rundumadum/dergruenguertel/">
-<title>Natuerlichwien.at - Rundumadum</title>
-<link>http://www.natuerlichwien.at/rundumadum/dergruenguertel/</link>
-<dc:creator>egmilman47</dc:creator>
-<dc:date>2005-05-06T21:33:41Z</dc:date>
-<dc:subject>Austria Vienna Wien greenbelt nature walking</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/Vienna" />
-    <rdf:li resource="http://del.icio.us/tag/Wien" />
-    <rdf:li resource="http://del.icio.us/tag/Austria" />
-    <rdf:li resource="http://del.icio.us/tag/walking" />
-    <rdf:li resource="http://del.icio.us/tag/nature" />
-    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars">
-<title>Tank - GBMediaWiki</title>
-<link>http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars</link>
-<dc:creator>jystewart</dc:creator>
-<dc:date>2005-03-21T22:44:11Z</dc:date>
-<dc:subject>greenbelt</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.greenbelt.ca/home.htm">
-<title>Greenbelt homepage</title>
-<link>http://www.greenbelt.ca/home.htm</link>
-<dc:creator>Gooberoo</dc:creator>
-<dc:date>2005-03-01T22:43:17Z</dc:date>
-<dc:subject>greenbelt ontario</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/ontario" />
-    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://pipwilsonbhp.blogspot.com/">
-<title>Pip Wilson bhp ...... blog</title>
-<link>http://pipwilsonbhp.blogspot.com/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:20:51Z</dc:date>
-<dc:subject>Greenbelt friend ideas links thinking weblog</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
-    <rdf:li resource="http://del.icio.us/tag/thinking" />
-    <rdf:li resource="http://del.icio.us/tag/ideas" />
-    <rdf:li resource="http://del.icio.us/tag/links" />
-    <rdf:li resource="http://del.icio.us/tag/friend" />
-    <rdf:li resource="http://del.icio.us/tag/weblog" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://maggidawn.typepad.com/maggidawn/">
-<title>maggi dawn</title>
-<link>http://maggidawn.typepad.com/maggidawn/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:20:11Z</dc:date>
-<dc:subject>Greenbelt ideas links thinking weblog</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
-    <rdf:li resource="http://del.icio.us/tag/thinking" />
-    <rdf:li resource="http://del.icio.us/tag/ideas" />
-    <rdf:li resource="http://del.icio.us/tag/links" />
-    <rdf:li resource="http://del.icio.us/tag/weblog" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.johndavies.org/">
-<title>John Davies</title>
-<link>http://www.johndavies.org/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:18:37Z</dc:date>
-<dc:subject>Greenbelt ideas links thinking weblog</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
-    <rdf:li resource="http://del.icio.us/tag/thinking" />
-    <rdf:li resource="http://del.icio.us/tag/ideas" />
-    <rdf:li resource="http://del.icio.us/tag/links" />
-    <rdf:li resource="http://del.icio.us/tag/weblog" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://jonnybaker.blogs.com/">
-<title>jonnybaker</title>
-<link>http://jonnybaker.blogs.com/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:18:17Z</dc:date>
-<dc:subject>Greenbelt event ideas links resources thinking weblog youth</dc:subject>
-<taxo:topics>
-  <rdf:Bag>
-    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
-    <rdf:li resource="http://del.icio.us/tag/thinking" />
-    <rdf:li resource="http://del.icio.us/tag/ideas" />
-    <rdf:li resource="http://del.icio.us/tag/links" />
-    <rdf:li resource="http://del.icio.us/tag/weblog" />
-    <rdf:li resource="http://del.icio.us/tag/youth" />
-    <rdf:li resource="http://del.icio.us/tag/event" />
-    <rdf:li resource="http://del.icio.us/tag/resources" />
-  </rdf:Bag>
-</taxo:topics>
-</item>
-
-</rdf:RDF>
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/flickr.feed b/plugins/FeedSub/extlib/XML/Feed/samples/flickr.feed
deleted file mode 100755 (executable)
index 57e83af..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>\r
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" \r
-    xmlns:dc="http://purl.org/dc/elements/1.1/">\r
-\r
-       <title>jamesstewart - Everyone's Tagged Photos</title>\r
-       <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/tags/jamesstewart/"/>\r
-       <link rel="icon" type="image/jpeg" href="http://www.flickr.com/images/buddyicon.jpg"/>\r
-       <info type="text/html" mode="escaped">A feed of jamesstewart - Everyone's Tagged Photos</info>\r
-       <modified>2005-08-01T18:50:26Z</modified>\r
-       <generator url="http://www.flickr.com/">Flickr</generator>\r
-\r
-       <entry>\r
-               <title>Oma and James</title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/30484029@N00/30367516/"/>\r
-               <link rel='enclosure' type="application/xml" href="http://james.anthropiccollective.org" />\r
-               <id>tag:flickr.com,2004:/photo/30367516</id>\r
-               <issued>2005-08-01T18:50:26Z</issued>\r
-               <modified>2005-08-01T18:50:26Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/30484029@N00/&quot;&gt;kstewart&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/30484029@N00/30367516/&quot; title=&quot;Oma and James&quot;&gt;&lt;img src=&quot;http://photos23.flickr.com/30367516_1f685a16e8_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Oma and James&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-&lt;p&gt;I have a beautiful Oma and a gorgeous husband.&lt;/p&gt;</content>\r
-               <author>\r
-                       <name>kstewart</name>\r
-                       <url>http://www.flickr.com/people/30484029@N00/</url>\r
-               </author>\r
-                               <dc:subject>jamesstewart oma stoelfamily</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title></title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21376174/"/>\r
-               <id>tag:flickr.com,2004:/photo/21376174</id>\r
-               <issued>2005-06-25T02:00:35Z</issued>\r
-               <modified>2005-06-25T02:00:35Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21376174/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos17.flickr.com/21376174_4314fd8d5c_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-&lt;p&gt;AMA Motocross Championship 2005, Budds Creek, Maryland&lt;/p&gt;</content>\r
-               <author>\r
-                       <name>Lan Rover</name>\r
-                       <url>http://www.flickr.com/people/buddscreek/</url>\r
-               </author>\r
-                               <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational rickycarmichael 259 jamesstewart 4</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title></title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21375650/"/>\r
-               <id>tag:flickr.com,2004:/photo/21375650</id>\r
-               <issued>2005-06-25T01:56:24Z</issued>\r
-               <modified>2005-06-25T01:56:24Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21375650/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos16.flickr.com/21375650_5c60e0dab1_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-</content>\r
-               <author>\r
-                       <name>Lan Rover</name>\r
-                       <url>http://www.flickr.com/people/buddscreek/</url>\r
-               </author>\r
-                               <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational 259 jamesstewart</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title></title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21375345/"/>\r
-               <id>tag:flickr.com,2004:/photo/21375345</id>\r
-               <issued>2005-06-25T01:54:11Z</issued>\r
-               <modified>2005-06-25T01:54:11Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21375345/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos15.flickr.com/21375345_4205fdd22b_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-</content>\r
-               <author>\r
-                       <name>Lan Rover</name>\r
-                       <url>http://www.flickr.com/people/buddscreek/</url>\r
-               </author>\r
-                               <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational 259 jamesstewart</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title>Lunch with Kari &amp; James, café in the crypt of St Martin in the fields</title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/16516618/"/>\r
-               <id>tag:flickr.com,2004:/photo/16516618</id>\r
-               <issued>2005-05-30T21:56:39Z</issued>\r
-               <modified>2005-05-30T21:56:39Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/16516618/&quot; title=&quot;Lunch with Kari &amp;amp; James, café in the crypt of St Martin in the fields&quot;&gt;&lt;img src=&quot;http://photos14.flickr.com/16516618_afaa4a395e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Lunch with Kari &amp;amp; James, café in the crypt of St Martin in the fields&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-</content>\r
-               <author>\r
-                       <name>fidothe</name>\r
-                       <url>http://www.flickr.com/people/fidothe/</url>\r
-               </author>\r
-                               <dc:subject>nokia7610 london stmartininthefields clarepatterson jamesstewart parvinstewart jimstewart susanstewart</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title>Stewart keeping it low over the obstacle.</title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/pqbon/10224728/"/>\r
-               <id>tag:flickr.com,2004:/photo/10224728</id>\r
-               <issued>2005-04-21T07:30:29Z</issued>\r
-               <modified>2005-04-21T07:30:29Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/pqbon/&quot;&gt;pqbon&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/pqbon/10224728/&quot; title=&quot;Stewart keeping it low over the obstacle.&quot;&gt;&lt;img src=&quot;http://photos7.flickr.com/10224728_b756341957_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Stewart keeping it low over the obstacle.&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-</content>\r
-               <author>\r
-                       <name>pqbon</name>\r
-                       <url>http://www.flickr.com/people/pqbon/</url>\r
-               </author>\r
-                               <dc:subject>ama hangtown motocross jamesstewart bubba</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title>king james stewart</title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/jjlook/7152910/"/>\r
-               <id>tag:flickr.com,2004:/photo/7152910</id>\r
-               <issued>2005-03-22T21:53:37Z</issued>\r
-               <modified>2005-03-22T21:53:37Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/jjlook/&quot;&gt;jj look&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/jjlook/7152910/&quot; title=&quot;king james stewart&quot;&gt;&lt;img src=&quot;http://photos7.flickr.com/7152910_a02ab5a750_m.jpg&quot; width=&quot;180&quot; height=&quot;240&quot; alt=&quot;king james stewart&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-&lt;p&gt;11th&lt;/p&gt;</content>\r
-               <author>\r
-                       <name>jj look</name>\r
-                       <url>http://www.flickr.com/people/jjlook/</url>\r
-               </author>\r
-                               <dc:subject>dilomar05 eastside austin texas 78702 kingjames stewart jamesstewart borrowed</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title>It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)</title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586562/"/>\r
-               <id>tag:flickr.com,2004:/photo/1586562</id>\r
-               <issued>2004-11-20T09:34:28Z</issued>\r
-               <modified>2004-11-20T09:34:28Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586562/&quot; title=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586562_0bc5313a3e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-</content>\r
-               <author>\r
-                       <name>fidothe</name>\r
-                       <url>http://www.flickr.com/people/fidothe/</url>\r
-               </author>\r
-                               <dc:subject>holiday grandrapids jamesstewart</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title>It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)</title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586539/"/>\r
-               <id>tag:flickr.com,2004:/photo/1586539</id>\r
-               <issued>2004-11-20T09:28:16Z</issued>\r
-               <modified>2004-11-20T09:28:16Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586539/&quot; title=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586539_c51e5f2e7a_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-</content>\r
-               <author>\r
-                       <name>fidothe</name>\r
-                       <url>http://www.flickr.com/people/fidothe/</url>\r
-               </author>\r
-                               <dc:subject>holiday grandrapids jamesstewart</dc:subject>\r
-       </entry>\r
-       <entry>\r
-               <title>It's a Grind, James and Jim can't decide)</title>\r
-               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586514/"/>\r
-               <id>tag:flickr.com,2004:/photo/1586514</id>\r
-               <issued>2004-11-20T09:25:05Z</issued>\r
-               <modified>2004-11-20T09:25:05Z</modified>\r
-               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
-\r
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586514/&quot; title=&quot;It's a Grind, James and Jim can't decide)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586514_733c2dfa3e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, James and Jim can't decide)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-</content>\r
-               <author>\r
-                       <name>fidothe</name>\r
-                       <url>http://www.flickr.com/people/fidothe/</url>\r
-               </author>\r
-                               <dc:subject>holiday grandrapids jamesstewart johnkentish</dc:subject>\r
-       </entry>\r
-\r
-</feed>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml b/plugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml
deleted file mode 100755 (executable)
index c351d3c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>\r<feed xmlns="http://www.w3.org/2005/Atom"\r xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">\r<title>Updates to Grand Rapids WiFi hotspot details</title>\r<link rel="alternate" type="text/html" href="http://grwifi.net/"/>\r<link rel="self" type="application/atom+xml" href="http://grwifi.net/atom/locations"/>\r<updated>2005-09-01T15:43:01-05:00</updated>\r<subtitle>WiFi Hotspots in Grand Rapids, MI</subtitle>\r<id>http://grwifi.net/atom/locations</id>\r<rights>Creative Commons Attribution-NonCommercial-ShareAlike 2.0 http://creativecommons.org/licenses/by-nc-sa/2.0/ </rights>\r\r\r<entry>\r    <title>Hotspot Details Updated: Sweetwaters</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/sweetwaters"/>\r    <id>http://grwifi.net/location/sweetwaters</id>\r    <updated>2005-09-01T15:43:01-05:00</updated>\r\r        <summary type="html">\r          The details of the WiFi hotspot at: Sweetwaters have been updated. Find out more at:
-http://grwifi.net/location/sweetwaters\r        </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Common Ground Coffee Shop</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/common-ground"/>\r    <id>http://grwifi.net/location/common-ground</id>\r    <updated>2005-09-01T15:42:39-05:00</updated>\r\r     <summary type="html">\r          The details of the WiFi hotspot at: Common Ground Coffee Shop have been updated. Find out more at:
-http://grwifi.net/location/common-ground\r      </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Grand Rapids Public Library, Main Branch</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/grpl-main-branch"/>\r    <id>http://grwifi.net/location/grpl-main-branch</id>\r    <updated>2005-09-01T15:42:20-05:00</updated>\r\r        <summary type="html">\r          The details of the WiFi hotspot at: Grand Rapids Public Library, Main Branch have been updated. Find out more at:
-http://grwifi.net/location/grpl-main-branch\r   </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Four Friends Coffee House</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/four-friends"/>\r    <id>http://grwifi.net/location/four-friends</id>\r    <updated>2005-09-01T15:41:35-05:00</updated>\r\r       <summary type="html">\r          The details of the WiFi hotspot at: Four Friends Coffee House have been updated. Find out more at:
-http://grwifi.net/location/four-friends\r       </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Barnes and Noble, Rivertown Crossings</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/barnes-noble-rivertown"/>\r    <id>http://grwifi.net/location/barnes-noble-rivertown</id>\r    <updated>2005-09-01T15:40:41-05:00</updated>\r\r       <summary type="html">\r          The details of the WiFi hotspot at: Barnes and Noble, Rivertown Crossings have been updated. Find out more at:
-http://grwifi.net/location/barnes-noble-rivertown\r     </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: The Boss Sports Bar &amp; Grille</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/boss-sports-bar"/>\r    <id>http://grwifi.net/location/boss-sports-bar</id>\r    <updated>2005-09-01T15:40:19-05:00</updated>\r\r  <summary type="html">\r          The details of the WiFi hotspot at: The Boss Sports Bar &amp; Grille have been updated. Find out more at:
-http://grwifi.net/location/boss-sports-bar\r    </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r</feed>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/hoder.xml b/plugins/FeedSub/extlib/XML/Feed/samples/hoder.xml
deleted file mode 100755 (executable)
index 0994635..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0" 
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
-  xmlns:admin="http://webns.net/mvcb/"
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-
-<channel>
-<title>Editor: Myself (Persian)</title>
-<link>http://editormyself.info</link>
-<description>This is a Persian (Farsi) weblog, written by Hossein Derakhshan (aka, Hoder), an Iranian Multimedia designer and a journalist who lives in Toronto since Dec 2000. He also keeps an English weblog with the same name.</description>
-<dc:language>en-us</dc:language>
-<dc:creator>hoder@hotmail.com</dc:creator>
-<dc:date>2005-10-12T19:45:32-05:00</dc:date>
-<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.15" />
-<sy:updatePeriod>hourly</sy:updatePeriod>
-<sy:updateFrequency>1</sy:updateFrequency>
-<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
-
-
-<item>
-<title>لينکدونی‌ | جلسه‌ی امریکن انترپرایز برای تقسیم قومی ایران</title>
-<link>http://www.aei.org/events/type.upcoming,eventID.1166,filter.all/event_detail.asp</link>
-<description>چطور بعضی‌ها فکر می‌کنند دست راستی‌های آمریکا از خامنه‌ای ملی‌گراترند</description>
-<guid isPermaLink="false">14645@http://i.hoder.com/</guid>
-<dc:subject>iran</dc:subject>
-<dc:date>2005-10-12T19:45:32-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | به صبحانه آگهی بدهید</title>
-<link>http://www.adbrite.com/mb/commerce/purchase_form.php?opid=24346&amp;afsid=1</link>
-<description>خیلی ارزان و راحت است</description>
-<guid isPermaLink="false">14644@http://i.hoder.com/</guid>
-<dc:subject>media/journalism</dc:subject>
-<dc:date>2005-10-12T17:23:15-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | نیروی انتظامی چگونه تابوهای هم‌جنس‌گرایانه را می‌شکند؛ فرنگوپولیس</title>
-<link>http://farangeopolis.blogspot.com/2005/10/blog-post_08.html</link>
-<description>از پس و پیش و حاشیه‌ی این ماجرا می‌توان یک مستند بی‌نظیر ساخت</description>
-<guid isPermaLink="false">14643@http://i.hoder.com/</guid>
-<dc:subject>soc_popculture</dc:subject>
-<dc:date>2005-10-12T17:06:40-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | بازتاب توقیف شد</title>
-<link>http://www.baztab.com/news/30201.php</link>
-<description>اگر گفتید یک وب‌سایت را چطور توقیف می‌کنند؟ لابد ماوس‌شان را قایم می‌کنند.</description>
-<guid isPermaLink="false">14642@http://i.hoder.com/</guid>
-<dc:subject>media/journalism</dc:subject>
-<dc:date>2005-10-12T14:41:57-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | رشد وب در سال 2005 از همیشه بیشتر بوده است&quot; بی.بی.سی</title>
-<link>http://news.bbc.co.uk/2/hi/technology/4325918.stm</link>
-<description></description>
-<guid isPermaLink="false">14640@http://i.hoder.com/</guid>
-<dc:subject>tech</dc:subject>
-<dc:date>2005-10-12T13:04:46-05:00</dc:date>
-</item>
-
-
-
-<item>
-<title>==قرعه کشی گرین کارد به زودی شروع می‌شود==</title>
-<link>http://nice.newsxphotos.biz/05/09/2007_dv_lottery_registration_to_begin_oct_5_14589.php</link>
-<description></description>
-<guid isPermaLink="false">14613@http://vagrantly.com</guid>
-<dc:subject>ads03</dc:subject>
-<dc:date>2005-09-27T04:49:22-05:00</dc:date>
-</item>
-
-
-
-
-
-
-<item>
-<title>پروژه‌ی هاروارد، قدم دوم</title>
-<link>http://editormyself.info/archives/2005/10/051012_014641.shtml</link>
-<description><![CDATA[<p>اگر یادتان باشد <a href="/archives/2005/09/050906_014504.shtml">چند وقت پیش نوشتم</a> که دانشگاه هاروارد پروژه‌ای دارد با نام آواهای جهانی که در آن به وبلاگ‌های غیر انگلیسی‌زبان می‌پردازد. خواشتم که اگر کسی علاقه دارد ایمیل بزند. تعداد زیادی جواب دادند و ابراز علاقه کردند. حالا وقت قدم دوم است.</p>
-
-<p>قدم دوم این است که برای اینکه مسوولین پروژه بتوانند تصمیم بگیرند که با چه کسی کار کنند، می‌خواهند نمونه‌ی کارهای علاقمندان مشارکت در این پرزو‌ه را ببینند.</p>
-
-<p>برای همین از همه‌ی علاقماندان، حتی کسانی که قبلا اعلام آمادگی نکرده بودند، می‌‌خواهم که یک موضوع رایج این روزهای وبلاگستان فارسی را انتخاب کنند و در هفتصد کلمه، به انگلیسی، بنویسند که وبلاگ‌دارهای درباره‌اش چه می‌گویند. لینک به پنج، شش وبلاگ و بازنویسی آنچه آنها از جنبه‌های گوناگون درباره‌ی آن موضوع نوشته‌اند با نقل قول مستقیم از آنها (البته ترجمه شده از فارسی) کافی است. دو سه جمله هم اول کار توضیح دهید که چرا این موضوع مهم است.</p>
-
-<p>متن نمونه را به آدرس ایمیل من hoder@hoder.com و نیز برای افراد زیر تا روز دوشنبه بفرستید:<br />
-ربکا : rmackinnon@cyber.law.harvard.edu<br />
-هیثم: haitham.sabbah@gmail.com</p>]]></description>
-<guid isPermaLink="false">14641@http://editormyself.info</guid>
-<dc:subject>weblog</dc:subject>
-<dc:date>2005-10-12T14:04:23-05:00</dc:date>
-</item>
-
-
-
-</channel>
-</rss>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml b/plugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml
deleted file mode 100755 (executable)
index 6121868..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--\r
-Description: entry author name\r
-Expect:      bozo and entries[0]['author_detail']['name'] == u'Example author'\r
--->\r
-<feed xmlns="http://www.w3.org/2005/Atom">\r
-<entry>\r
-  <author>\r
-    <name>Example author</name>\r
-    <email>me@example.com</email>\r
-    <uri>http://example.com/</uri>\r
-  </author>\r
-</entry>\r
-</feed
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml
deleted file mode 100755 (executable)
index b0a1fee..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-<channel>
-<copyright>Copyright 1997-1999 UserLand Software, Inc.</copyright>
-<pubDate>Thu, 08 Jul 1999 07:00:00 GMT</pubDate>
-<lastBuildDate>Thu, 08 Jul 1999 16:20:26 GMT</lastBuildDate>
-<docs>http://my.userland.com/stories/storyReader$11</docs>
-<description>News and commentary from the cross-platform scripting community.</description>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<image>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<url>http://www.scripting.com/gifs/tinyScriptingNews.gif</url>
-<height>40</height>
-<width>78</width>
-<description>What is this used for?</description>
-</image>
-<managingEditor>dave@userland.com (Dave Winer)</managingEditor>
-<webMaster>dave@userland.com (Dave Winer)</webMaster>
-<language>en-us</language>
-<skipHours>
-<hour>6</hour>
-<hour>7</hour>
-<hour>8</hour>
-<hour>9</hour>
-<hour>10</hour>
-<hour>11</hour>
-</skipHours>
-<skipDays>
-<day>Sunday</day>
-</skipDays>
-<rating>(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))</rating>
-<item>
-<title>stuff</title>
-<link>http://bar</link>
-<description>This is an article about some stuff</description>
-</item>
-<textinput>
-<title>Search Now!</title>
-<description>Enter your search &lt;terms&gt;</description>
-<name>find</name>
-<link>http://my.site.com/search.cgi</link>
-</textinput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml
deleted file mode 100755 (executable)
index cfe9169..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="EuC-JP"?>  
-<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-<channel>
-<title>膮ŸÛë´é´Ì´×´è´ŒÁ¹´Õ</title>
-<link>http://www.mozilla.org</link>
-<description>膮ŸÛë´é´Ì´×´è´ŒÁ¹´Õ</description>
-<language>ja</language>  <!-- tagged as Japanese content -->
-<item>
-<title>NYÒ™Á¢¸»ÌêÛì15285.25´ƒ´‘Á£´Û´—´ÀÁ¹´ê´Ì´éÒ™Ûì¡êçÒÕ‰ÌêÁ£</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-<item>
-<title>‚§±Çç¡ËßÛÂÒ\8féøÓ¸Á£Ë²®Ÿè†Ûèå\8d±ÇÌ’¡Íæ—éøë‡Á£</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-<item>
-<title>ËÜË”\81ïÌëÈšÁ¢È†Ë§æàÀ豎ˉۂÁ¢Ë‚åܼšÛ˜íËüËÁ£</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-<item>
-<title>2000‚øíŠå\90Á¢«‘¦éÛë¹\8fÛ\90çéÛ§ÛÂè†ÒæÓ¸Á£Ì¾«…æ—ÕÝéøƒ¸Á£</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml
deleted file mode 100755 (executable)
index f0964a2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-<channel>
-<language>en</language>
-<description>News and commentary from the cross-platform scripting community.</description>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<image>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<url>http://www.scripting.com/gifs/tinyScriptingNews.gif</url>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml
deleted file mode 100755 (executable)
index 5d75c35..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>
-<!-- RSS generation done by 'Radio UserLand' on Fri, 13 Apr 2001 19:23:02 GMT -->
-<rss version="0.92">
-       <channel>
-               <title>Dave Winer: Grateful Dead</title>
-               <link>http://www.scripting.com/blog/categories/gratefulDead.html</link>
-               <description>A high-fidelity Grateful Dead song every day. This is where we&apos;re experimenting with enclosures on RSS news items that download when you&apos;re not using your computer. If it works (it will) it will be the end of the Click-And-Wait multimedia experience on the Internet. </description>
-               <lastBuildDate>Fri, 13 Apr 2001 19:23:02 GMT</lastBuildDate>
-               <docs>http://backend.userland.com/rss092</docs>
-               <managingEditor>dave@userland.com (Dave Winer)</managingEditor>
-               <webMaster>dave@userland.com (Dave Winer)</webMaster>
-               <cloud domain="data.ourfavoritesongs.com" port="80" path="/RPC2" registerProcedure="ourFavoriteSongs.rssPleaseNotify" protocol="xml-rpc"/>
-               <item>
-                       <description>It&apos;s been a few days since I added a song to the Grateful Dead channel. Now that there are all these new Radio users, many of whom are tuned into this channel (it&apos;s #16 on the hotlist of upstreaming Radio users, there&apos;s no way of knowing how many non-upstreaming users are subscribing, have to do something about this..). Anyway, tonight&apos;s song is a live version of Weather Report Suite from Dick&apos;s Picks Volume 7. It&apos;s wistful music. Of course a beautiful song, oft-quoted here on Scripting News. &lt;i&gt;A little change, the wind and rain.&lt;/i&gt;
-</description>
-                       <enclosure url="http://www.scripting.com/mp3s/weatherReportDicksPicsVol7.mp3" length="6182912" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>Kevin Drennan started a &lt;a href=&quot;http://deadend.editthispage.com/&quot;&gt;Grateful Dead Weblog&lt;/a&gt;. Hey it&apos;s cool, he even has a &lt;a href=&quot;http://deadend.editthispage.com/directory/61&quot;&gt;directory&lt;/a&gt;. &lt;i&gt;A Frontier 7 feature.&lt;/i&gt;</description>
-                       <source url="http://scriptingnews.userland.com/xml/scriptingNews2.xml">Scripting News</source>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/other1.html&quot;&gt;The Other One&lt;/a&gt;, live instrumental, One From The Vault. Very rhythmic very spacy, you can listen to it many times, and enjoy something new every time.</description>
-                       <enclosure url="http://www.scripting.com/mp3s/theOtherOne.mp3" length="6666097" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>This is a test of a change I just made. Still diggin..</description>
-                       </item>
-               <item>
-                       <description>The HTML rendering almost &lt;a href=&quot;http://validator.w3.org/check/referer&quot;&gt;validates&lt;/a&gt;. Close. Hey I wonder if anyone has ever published a style guide for ALT attributes on images? What are you supposed to say in the ALT attribute? I sure don&apos;t know. If you&apos;re blind send me an email if u cn rd ths. </description>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/Franklin&apos;s_Tower.txt&quot;&gt;Franklin&apos;s Tower&lt;/a&gt;, a live version from One From The Vault.</description>
-                       <enclosure url="http://www.scripting.com/mp3s/franklinsTower.mp3" length="6701402" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>Moshe Weitzman says Shakedown Street is what I&apos;m lookin for for tonight. I&apos;m listening right now. It&apos;s one of my favorites. &quot;Don&apos;t tell me this town ain&apos;t got no heart.&quot; Too bright. I like the jazziness of Weather Report Suite. Dreamy and soft. How about The Other One? &quot;Spanish lady come to me..&quot;</description>
-                       <source url="http://scriptingnews.userland.com/xml/scriptingNews2.xml">Scripting News</source>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://www.scripting.com/mp3s/youWinAgain.mp3&quot;&gt;The news is out&lt;/a&gt;, all over town..&lt;p&gt;
-You&apos;ve been seen, out runnin round. &lt;p&gt;
-The lyrics are &lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/You_Win_Again.txt&quot;&gt;here&lt;/a&gt;, short and sweet. &lt;p&gt;
-&lt;i&gt;You win again!&lt;/i&gt;
-</description>
-                       <enclosure url="http://www.scripting.com/mp3s/youWinAgain.mp3" length="3874816" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://www.getlyrics.com/lyrics/grateful-dead/wake-of-the-flood/07.htm&quot;&gt;Weather Report Suite&lt;/a&gt;: &quot;Winter rain, now tell me why, summers fade, and roses die? The answer came. The wind and rain. Golden hills, now veiled in grey, summer leaves have blown away. Now what remains? The wind and rain.&quot;</description>
-                       <enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://arts.ucsc.edu/gdead/agdl/darkstar.html&quot;&gt;Dark Star&lt;/a&gt; crashes, pouring its light into ashes.</description>
-                       <enclosure url="http://www.scripting.com/mp3s/darkStar.mp3" length="10889216" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>DaveNet: &lt;a href=&quot;http://davenet.userland.com/2001/01/21/theUsBlues&quot;&gt;The U.S. Blues&lt;/a&gt;.</description>
-                       </item>
-               <item>
-                       <description>Still listening to the US Blues. &lt;i&gt;&quot;Wave that flag, wave it wide and high..&quot;&lt;/i&gt; Mistake made in the 60s. We gave our country to the assholes. Ah ah. Let&apos;s take it back. Hey I&apos;m still a hippie. &lt;i&gt;&quot;You could call this song The United States Blues.&quot;&lt;/i&gt;</description>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://www.sixties.com/html/garcia_stack_0.html&quot;&gt;&lt;img src=&quot;http://www.scripting.com/images/captainTripsSmall.gif&quot; height=&quot;51&quot; width=&quot;42&quot; border=&quot;0&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; align=&quot;right&quot;&gt;&lt;/a&gt;In celebration of today&apos;s inauguration, after hearing all those great patriotic songs, America the Beautiful, even The Star Spangled Banner made my eyes mist up. It made my choice of Grateful Dead song of the night realllly easy. Here are the &lt;a href=&quot;http://searchlyrics2.homestead.com/gd_usblues.html&quot;&gt;lyrics&lt;/a&gt;. Click on the audio icon to the left to give it a listen. &quot;Red and white, blue suede shoes, I&apos;m Uncle Sam, how do you do?&quot; It&apos;s a different kind of patriotic music, but man I love my country and I love Jerry and the band. &lt;i&gt;I truly do!&lt;/i&gt;</description>
-                       <enclosure url="http://www.scripting.com/mp3s/usBlues.mp3" length="5272510" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>Grateful Dead: &quot;Tennessee, Tennessee, ain&apos;t no place I&apos;d rather be.&quot;</description>
-                       <enclosure url="http://www.scripting.com/mp3s/tennesseeJed.mp3" length="3442648" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>Ed Cone: &quot;Had a nice Deadhead experience with my wife, who never was one but gets the vibe and knows and likes a lot of the music. Somehow she made it to the age of 40 without ever hearing Wharf Rat. We drove to Jersey and back over Christmas with the live album commonly known as Skull and Roses in the CD player much of the way, and it was cool to see her discover one the band&apos;s finest moments. That song is unique and underappreciated. Fun to hear that disc again after a few years off -- you get Jerry as blues-guitar hero on Big Railroad Blues and a nice version of Bertha.&quot;</description>
-                       <enclosure url="http://www.scripting.com/mp3s/darkStarWharfRat.mp3" length="27503386" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/fotd.html&quot;&gt;Tonight&apos;s Song&lt;/a&gt;: &quot;If I get home before daylight I just might get some sleep tonight.&quot; </description>
-                       <enclosure url="http://www.scripting.com/mp3s/friendOfTheDevil.mp3" length="3219742" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/uncle.html&quot;&gt;Tonight&apos;s song&lt;/a&gt;: &quot;Come hear Uncle John&apos;s Band by the river side. Got some things to talk about here beside the rising tide.&quot;</description>
-                       <enclosure url="http://www.scripting.com/mp3s/uncleJohnsBand.mp3" length="4587102" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/Me_and_My_Uncle.txt&quot;&gt;Me and My Uncle&lt;/a&gt;: &quot;I loved my uncle, God rest his soul, taught me good, Lord, taught me all I know. Taught me so well, I grabbed that gold and I left his dead ass there by the side of the road.&quot;
-</description>
-                       <enclosure url="http://www.scripting.com/mp3s/meAndMyUncle.mp3" length="2949248" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>Truckin, like the doo-dah man, once told me gotta play your hand. Sometimes the cards ain&apos;t worth a dime, if you don&apos;t lay em down.</description>
-                       <enclosure url="http://www.scripting.com/mp3s/truckin.mp3" length="4847908" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>Two-Way-Web: &lt;a href=&quot;http://www.thetwowayweb.com/payloadsForRss&quot;&gt;Payloads for RSS&lt;/a&gt;. &quot;When I started talking with Adam late last year, he wanted me to think about high quality video on the Internet, and I totally didn&apos;t want to hear about it.&quot;</description>
-                       </item>
-               <item>
-                       <description>A touch of gray, kinda suits you anyway..</description>
-                       <enclosure url="http://www.scripting.com/mp3s/touchOfGrey.mp3" length="5588242" type="audio/mpeg"/>
-                       </item>
-               <item>
-                       <description>&lt;a href=&quot;http://www.sixties.com/html/garcia_stack_0.html&quot;&gt;&lt;img src=&quot;http://www.scripting.com/images/captainTripsSmall.gif&quot; height=&quot;51&quot; width=&quot;42&quot; border=&quot;0&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; align=&quot;right&quot;&gt;&lt;/a&gt;In celebration of today&apos;s inauguration, after hearing all those great patriotic songs, America the Beautiful, even The Star Spangled Banner made my eyes mist up. It made my choice of Grateful Dead song of the night realllly easy. Here are the &lt;a href=&quot;http://searchlyrics2.homestead.com/gd_usblues.html&quot;&gt;lyrics&lt;/a&gt;. Click on the audio icon to the left to give it a listen. &quot;Red and white, blue suede shoes, I&apos;m Uncle Sam, how do you do?&quot; It&apos;s a different kind of patriotic music, but man I love my country and I love Jerry and the band. &lt;i&gt;I truly do!&lt;/i&gt;</description>
-                       <enclosure url="http://www.scripting.com/mp3s/usBlues.mp3" length="5272510" type="audio/mpeg"/>
-                       </item>
-               </channel>
-       </rss>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml
deleted file mode 100755 (executable)
index 0edecf5..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-
-<rdf:RDF 
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-  xmlns="http://purl.org/rss/1.0/"
->
-
-  <channel rdf:about="http://www.xml.com/xml/news.rss">
-    <title>XML.com</title>
-    <link>http://xml.com/pub</link>
-    <description>
-      XML.com features a rich mix of information and services 
-      for the XML community.
-    </description>
-
-    <image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />
-
-    <items>
-      <rdf:Seq>
-        <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />
-        <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />
-      </rdf:Seq>
-    </items>
-
-    <textinput rdf:resource="http://search.xml.com" />
-
-  </channel>
-  
-  <image rdf:about="http://xml.com/universal/images/xml_tiny.gif">
-    <title>XML.com</title>
-    <link>http://www.xml.com</link>
-    <url>http://xml.com/universal/images/xml_tiny.gif</url>
-  </image>
-  
-  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
-    <title>Processing Inclusions with XSLT</title>
-    <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
-    <description>
-     Processing document inclusions with general XML tools can be 
-     problematic. This article proposes a way of preserving inclusion 
-     information through SAX-based processing.
-    </description>
-  </item>
-  
-  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">
-    <title>Putting RDF to Work</title>
-    <link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>
-    <description>
-     Tool and API support for the Resource Description Framework 
-     is slowly coming of age. Edd Dumbill takes a look at RDFDB, 
-     one of the most exciting new RDF toolkits.
-    </description>
-  </item>
-
-  <textinput rdf:about="http://search.xml.com">
-    <title>Search XML.com</title>
-    <description>Search XML.com's XML collection</description>
-    <name>s</name>
-    <link>http://search.xml.com</link>
-  </textinput>
-
-</rdf:RDF>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml
deleted file mode 100755 (executable)
index 26235f7..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?> 
-
-<rdf:RDF 
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
-  xmlns:co="http://purl.org/rss/1.0/modules/company/"
-  xmlns:ti="http://purl.org/rss/1.0/modules/textinput/"
-  xmlns="http://purl.org/rss/1.0/"
-> 
-
-  <channel rdf:about="http://meerkat.oreillynet.com/?_fl=rss1.0">
-    <title>Meerkat</title>
-    <link>http://meerkat.oreillynet.com</link>
-    <description>Meerkat: An Open Wire Service</description>
-    <dc:publisher>The O'Reilly Network</dc:publisher>
-    <dc:creator>Rael Dornfest (mailto:rael@oreilly.com)</dc:creator>
-    <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, Inc.</dc:rights>
-    <dc:date>2000-01-01T12:00+00:00</dc:date>
-    <sy:updatePeriod>hourly</sy:updatePeriod>
-    <sy:updateFrequency>2</sy:updateFrequency>
-    <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
-
-    <image rdf:resource="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg" />
-
-    <items>
-      <rdf:Seq>
-        <rdf:li resource="http://c.moreover.com/click/here.pl?r123" />
-      </rdf:Seq>
-    </items>
-
-    <textinput rdf:resource="http://meerkat.oreillynet.com" />
-
-  </channel>
-
-  <image rdf:about="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg">
-    <title>Meerkat Powered!</title>
-    <url>http://meerkat.oreillynet.com/icons/meerkat-powered.jpg</url>
-    <link>http://meerkat.oreillynet.com</link>
-  </image>
-
-  <item rdf:about="http://c.moreover.com/click/here.pl?r123">
-    <title>XML: A Disruptive Technology</title> 
-    <link>http://c.moreover.com/click/here.pl?r123</link>
-    <dc:description>
-      XML is placing increasingly heavy loads on the existing technical
-      infrastructure of the Internet.
-    </dc:description>
-    <dc:publisher>The O'Reilly Network</dc:publisher>
-    <dc:creator>Simon St.Laurent (mailto:simonstl@simonstl.com)</dc:creator>
-    <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, Inc.</dc:rights>
-    <dc:subject>XML</dc:subject>
-    <co:name>XML.com</co:name>
-    <co:market>NASDAQ</co:market>
-    <co:symbol>XML</co:symbol>
-  </item> 
-
-  <textinput rdf:about="http://meerkat.oreillynet.com">
-    <title>Search Meerkat</title>
-    <description>Search Meerkat's RSS Database...</description>
-    <name>s</name>
-    <link>http://meerkat.oreillynet.com/</link>
-    <ti:function>search</ti:function>
-    <ti:inputType>regex</ti:inputType>
-  </textinput>
-
-</rdf:RDF>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml
deleted file mode 100755 (executable)
index 53483cc..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>\r
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0.modules/content/">\r
-   <channel>\r
-      <title>Liftoff News</title>\r
-      <link>http://liftoff.msfc.nasa.gov/</link>\r
-      <description>Liftoff to Space Exploration.</description>\r
-      <language>en-us</language>\r
-      <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>\r
-      <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>\r
-      <docs>http://blogs.law.harvard.edu/tech/rss</docs>\r
-      <generator>Weblog Editor 2.0</generator>\r
-      <managingEditor>editor@example.com</managingEditor>\r
-      <webMaster>webmaster@example.com</webMaster>\r
-      <item>\r
-         <title>Star City</title>\r
-         <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>\r
-         <description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's &lt;a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm"&gt;Star City&lt;/a&gt;.</description>\r
-         <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>\r
-         <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>\r
-      </item>\r
-      <item>\r
-         <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a &lt;a href="http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm"&gt;partial eclipse of the Sun&lt;/a&gt; on Saturday, May 31st.</description>\r
-         <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>\r
-         <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>\r
-      </item>\r
-      <item>\r
-         <title>The Engine That Does More</title>\r
-         <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>\r
-         <description>Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly.  The proposed VASIMR engine would do that.</description>\r
-         <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>\r
-         <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>\r
-                <content:encoded><![CDATA[<p>Test content</p>]]></content:encoded>\r
-      </item>\r
-      <item>\r
-         <title>Astronauts' Dirty Laundry</title>\r
-         <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>\r
-         <description>Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them.  Instead, astronauts have other options.</description>\r
-         <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>\r
-         <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>\r
-      </item>\r
-   </channel>\r
-</rss>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml b/plugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml
deleted file mode 100755 (executable)
index f8a04bb..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0">
-<channel>
-<title>Six Apart - News</title>
-<link>http://www.sixapart.jp/</link>
-<description></description>
-<language>ja</language>
-<copyright>Copyright 2005</copyright>
-<lastBuildDate>Fri, 07 Oct 2005 19:09:34 +0900</lastBuildDate>
-<generator>http://www.movabletype.org/?v=3.2-ja</generator>
-<docs>http://blogs.law.harvard.edu/tech/rss</docs> 
-
-<item>
-<title>ファイブ・ディーが、Movable Typeでブログプロモーションをスタート</title>
-<description><![CDATA[<p><img alt="MIYAZAWAblog_banner.jpg" src="http://www.sixapart.jp/MIYAZAWAblog_banner.jpg" width="200" height="88" align="right" /><br />
-ファイブ・ディーは、Movable Typeで構築したプロモーション ブログ『宮沢和史 中南米ツアーblog Latin America 2005』を開設しました。</p>
-
-<p>9月21日に開設されたこのブログは、ブラジル、ホンジュラス、ニカラグア、メキシコ、キューバの5か国を巡る「Latin America 2005」ツアーに合わせ、そのツアーの模様を同行マネージャーがレポートしていきます。<br />
-さらに今月2日からは宮沢和史自身が日々録音した声をPodcastingするという点でも、ブログを使ったユニークなプロモーションとなっています。</p>
-
-<p><a href="http://www.five-d.co.jp/miyazawa/jp/blog/la2005/">「宮沢和史 中南米ツアーblog Latin America 2005」</a></p>
-
-<p>※シックス・アパートではこうしたブログを使ったプロモーションに最適な製品をご用意しております。<br />
-<ul><li><a href="/movabletype/">Movable Type</a><br />
-<li><a href="/typepad/typepad_promotion.html">TypePad Promotion</a><br />
-</ul></p>]]></description>
-<link>http://www.sixapart.jp/news/2005/10/07-1909.html</link>
-<guid>http://www.sixapart.jp/news/2005/10/07-1909.html</guid>
-<category>news</category>
-<pubDate>Fri, 07 Oct 2005 19:09:34 +0900</pubDate>
-</item>
-<item>
-<title>Movable Type 3.2日本語版の提供を開始</title>
-<description><![CDATA[<p><img alt="Movable Type Logo" src="/images/mt3-logo-small.gif" width="151" height="37"/></p>
-<p>シックス・アパートは、Movable Type 3.2日本語版の提供を開始いたしました。<br />
-ベータテストにご協力いただいた多くの皆様に、スタッフ一同、心から感謝いたします。</p>
-<p>製品概要など、詳しくは<a href="http://www.sixapart.jp/press_releases/2005/09/29-1529.html" title="Six Apart - News: シックス・アパートが、スパム対策強化の「Movable Type 3.2 日本語版」を提供開始">プレスリリース</a>をご参照下さい。</p>
-<p>ご購入のご検討は、<a href="http://www.sixapart.jp/movabletype/purchase-mt.html">Movable Typeのご購入</a>からどうぞ。</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/29-1530.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/29-1530.html</guid>
-<category>news</category>
-<pubDate>Thu, 29 Sep 2005 15:30:00 +0900</pubDate>
-</item>
-<item>
-<title>シックス・アパートが、スパム対策強化の「Movable Type 3.2 日本語版」を提供開始</title>
-<description><![CDATA[<p><プレスリリース資料></p>
-<ul>
-  <li><a href="http://www.sixapart.jp/sixapart20050929.pdf">印刷用(PDF版)</a></li>
-</ul>
-<p><strong>シックス・アパートが、スパム対策強化の「Movable Type 3.2 日本語版」を提供開始 ~ スパムの自動判別機能や新ユーザー・インターフェースで、運用管理の機能を強化 ~</strong></p>
-<p>2005年9月29日<br />
-シックス・アパート株式会社</p>
-<p>ブログ・ソフトウェア大手のシックス・アパート株式会社(本社:東京都港区、代表取締役:関 信浩)は、「Movable Type(ムーバブル・タイプ) 3.2 日本語版」(URL:<a href="http://www.sixapart.jp/movabletype/">http://www.sixapart.jp/movabletype/</a>)を9月29日より提供開始いたします。</p>]]></description>
-<link>http://www.sixapart.jp/press_releases/2005/09/29-1529.html</link>
-<guid>http://www.sixapart.jp/press_releases/2005/09/29-1529.html</guid>
-<category>Press Releases</category>
-<pubDate>Thu, 29 Sep 2005 15:29:00 +0900</pubDate>
-</item>
-<item>
-<title>スタッフを募集しています</title>
-<description><![CDATA[<p>シックス・アパートはMovable TypeやTypePadの開発エンジニアなど、スタッフを広く募集しています。具体的な募集職種は次の通りです。</p>
-
-<ul>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0007.html">Movable Type開発エンジニア</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0004.html">TypePad開発エンジニア</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0003.html">カスタマーサポート・ディレクター</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0002.html">マーケティング・広報アシスタント</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0001.html">開発アシスタント</a></li>
-</ul>
-
-<p>拡大を続ける、日本のブログ市場を積極的にリードする人材を、シックス・アパートは募集しています。上記以外の職種につきましても、お気軽にお問い合わせください。詳しい募集要項や応募方法については、<a href="/jobs/">求人情報のページ</a>をご覧ください。<br />
-</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/27-0906.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/27-0906.html</guid>
-<category>news</category>
-<pubDate>Tue, 27 Sep 2005 09:06:10 +0900</pubDate>
-</item>
-<item>
-<title>サイト接続不具合に関するお詫びと復旧のお知らせ</title>
-<description><![CDATA[<p>9月24日(土)の14:45ごろから、同日18:30ごろまで、シックス・アパート社のウェブサイトが不安定になっており、断続的に接続できない不具合が発生しておりました。このため、この期間中にウェブサイトの閲覧や製品のダウンロードができませんでした。</p>
-
-<p>なお現在は不具合は解消しております。みなさまにご迷惑をおかけしたことをお詫びいたします。</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/26-1000.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/26-1000.html</guid>
-<category>news</category>
-<pubDate>Mon, 26 Sep 2005 10:00:56 +0900</pubDate>
-</item>
-<item>
-<title>企業ブログ向けパッケージ「TypePad Promotion」を新発売</title>
-<description><![CDATA[<p>シックス・アパートは、ウェブログ・サービスTypePadの企業ブログ向けパッケージ「TypePad Promotion」(タイプパッド・プロモーションの発売を10月下旬から開始いたします。</p>
-
-<p>詳しくは、<a href="http://www.sixapart.jp/press_releases/2005/09/20-1500.html" title="プレスリリース: 「TypePad Promotion」新発売">プレスリリース</a>をご参照下さい。</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/20-1500.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/20-1500.html</guid>
-<category>news</category>
-<pubDate>Tue, 20 Sep 2005 15:00:01 +0900</pubDate>
-</item>
-<item>
-<title>シックス・アパートが、法人向けブログパッケージ「TypePad Promotion」を発売</title>
-<description><![CDATA[<p><プレスリリース資料><br />
-<a href="http://www.sixapart.jp/sixapart20050920.pdf">印刷用(PDF版)</a></p>
-
-<p><br />
-<strong>シックス・アパートが、法人向けブログパッケージ「TypePad Promotion」を発売<br />
-~PR/IRサイトやキャンペーンサイトなど企業のプロモーションニーズに特化~<br />
-</strong><br />
-2005年9月20日<br />
-シックス・アパート株式会社</p>
-
-<p>ブログ・サービス大手のシックス・アパート株式会社(本社:東京都港区、代表取締役:関 信浩)は、法人向けプロモーションブログ・パッケージ「TypePad Promotion(タイプパッド・プロモーション)」(URL:<a href="http://www.sixapart.jp/typepad/typepad_promotion.html">http://www.sixapart.jp/typepad/typepad_promotion.html</a>)を10月下旬より販売開始いたします。</p>]]></description>
-<link>http://www.sixapart.jp/press_releases/2005/09/20-1500.html</link>
-<guid>http://www.sixapart.jp/press_releases/2005/09/20-1500.html</guid>
-<category>Press Releases</category>
-<pubDate>Tue, 20 Sep 2005 15:00:00 +0900</pubDate>
-</item>
-<item>
-<title>Six [days] Apart Week</title>
-<description><![CDATA[<p>本日、9月16日はSix Apartの創業者ミナ・トロットの誕生日です。<br />
-私たちの会社は、創業者のトロット夫妻(ベンとミナ)の誕生日が、6日離れていることからSix  [days] Apart →Six Apartという風に名付けられています。本日から22日までの6日間を社名の由来となる Six [days] Apart Weekとして、私たちのプロダクトをご紹介させていただきます。</p>
-
-<p>今日は、ブログ・サービスのTypePad(タイプパッド)をご紹介します。<br />
-<img alt="tp-logo.gif" src="http://www.sixapart.jp/tp-logo.gif" width="227" height="52" /></p>
-
-<p>TypePadは、米国PC MAGAZINE誌の2003年EDITOR'S CHOICE とBEST OF THE YEARに選ばれております。<br />
-<img alt="pcmag-ad.gif" src="http://www.sixapart.jp/pcmag-ad.gif" width="297" height="100" /><br />
-</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/16-1941.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/16-1941.html</guid>
-<category>news</category>
-<pubDate>Fri, 16 Sep 2005 19:41:47 +0900</pubDate>
-</item>
-<item>
-<title>ハイパーワークスが商用フォントを利用できるMovable Typeホスティングサービスを開始</title>
-<description><![CDATA[<p>ソフト開発会社の<a href="http://www.hyperwrx.co.jp/">有限会社ハイパーワークス</a>は、商用フォントなど多彩なフォントをブログ上で利用できるブログ・サービス「<a href="http://glyph-on.jp/">Glyph-On!(グリフォン) Movable Type ホスティング サービス</a>」の提供を開始しました。<br />
-</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/14-1700.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/14-1700.html</guid>
-<category>news</category>
-<pubDate>Wed, 14 Sep 2005 17:00:00 +0900</pubDate>
-</item>
-<item>
-<title>Movable Type開発エンジニアの募集</title>
-<description><![CDATA[<p>
-勤務形態: フルタイム<br />
-勤務地: 東京 (赤坂)<br />
-職種: ソフトウェア・エンジニア<br />
-職務内容: Movable Typeの開発業務全般<br />
-募集人数: 若干名
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0007.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0007.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:07:00 +0900</pubDate>
-</item>
-<item>
-<title>TypePad開発エンジニアの募集</title>
-<description><![CDATA[<p>
-勤務形態: フルタイム<br />
-勤務地: 東京 (赤坂)<br />
-職種: アプリケーション・エンジニア<br />
-職務内容: TypePadのカスタマイズ、周辺開発<br />
-募集人数: 若干名
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0004.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0004.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:04:00 +0900</pubDate>
-</item>
-<item>
-<title>カスタマーサポート・ディレクターの募集</title>
-<description><![CDATA[<p>勤務形態: フルタイム<br />
-勤務地: 東京(赤坂)<br />
-職種: カスタマーサポート・ディレクター<br />
-職務内容: TypePadやMovable Typeのカスタマーサポート業務の統括<br />
-募集人数: 若干名
-</p>
-]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0003.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0003.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:03:30 +0900</pubDate>
-</item>
-<item>
-<title>アルバイト(マーケティング・広報アシスタント)の募集</title>
-<description><![CDATA[<p>勤務形態: アルバイト<br />
-勤務地: 東京(港区)<br />
-職種:マーケティング・PRのアシスタント業務<br />
-募集人数: 若干名<br />
-時給:1000円~(但し、試用期間終了後に応相談)。交通費支給<br />
-時間:平日10時30分~18時30分まで。週3日以上(応相談)<br />
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0002.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0002.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:02:00 +0900</pubDate>
-</item>
-<item>
-<title>アルバイト(開発アシスタント)の募集</title>
-<description><![CDATA[<p>勤務形態: アルバイト<br />
-勤務地: 東京(港区)<br />
-職種: アプリケーション開発のアシスタント業務<br />
-募集人数: 若干名<br />
-時給:1000円~(但し、試用期間終了後に応相談)。交通費支給<br />
-時間:平日10時30分~18時30分まで。週3日以上(応相談)
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0001.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0001.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:01:00 +0900</pubDate>
-</item>
-<item>
-<title>TypePad Japan がバージョンアップしました。</title>
-<description><![CDATA[<p><a href="http://www.sixapart.jp/typepad/">「TypePad Japan(タイプパッドジャパン)」</a>において、本日、「TypePad 1.6 日本語版」へのバージョンアップを行いました。最新版となる「TypePad 1.6 日本語版」では、ブログデザインの機能強化、ポッドキャスティング対応、モブログ対応に加え、今回新たに大幅な容量アップが行われております。皆様、新しくなった<a href="http://www.sixapart.jp/typepad/">TypePad Japan</a>にどうぞご期待ください。</p>
-
-<p>なお、TypePadの携帯対応強化に関しましては、本日よりTypePad Japanのお客様を対象にオープン・ベータを開始しております。</p>
-
-<p>2005年9月5日発表のTypePad日本語版 1.6プレスリリースは<a href="http://www.sixapart.jp/press_releases/2005/09/05-1420.html">こちら</a>をご覧下さい。</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/12-1953.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/12-1953.html</guid>
-<category>news</category>
-<pubDate>Mon, 12 Sep 2005 19:53:07 +0900</pubDate>
-</item>
-
-
-</channel>
-</rss>
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/samples/technorati.feed b/plugins/FeedSub/extlib/XML/Feed/samples/technorati.feed
deleted file mode 100755 (executable)
index 6274a32..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0"
-    xmlns:tapi="http://api.technorati.com/dtd/tapi-002.xml">
-    <channel>
-        <title>[Technorati] Tag results for greenbelt</title>
-        <link>http://www.technorati.com/tag/greenbelt</link>
-        <description>Posts tagged with "greenbelt" on Technorati.</description>
-        <pubDate>Mon, 08 Aug 2005 15:15:08 GMT</pubDate>
-        <category domain="http://www.technorati.com/tag">greenbelt</category>
-        <tapi:inboundblogs>2</tapi:inboundblogs>
-        <tapi:inboundlinks>2</tapi:inboundlinks>
-        <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-        <generator>Technorati v1.0</generator>
-        <image>
-            <url>http://static.technorati.com/pix/logos/logo_reverse_sm.gif</url>
-            <title>Technorati logo</title>
-            <link>http://www.technorati.com</link>
-        </image>
-        <skipHours>
-            <hour>1</hour>
-            <hour>7</hour>
-            <hour>9</hour>
-        </skipHours>
-        <webMaster>support@technorati.com (Technorati Support)</webMaster>
-        <docs>http://blogs.law.harvad.edu/tech/rss</docs>
-        <ttl>60</ttl>
-        <item>
-            <title>Greenbelt</title>
-            <link>http://maggidawn.typepad.com/maggidawn/2005/07/greenbelt.html</link>
-            <description>So if the plan goes according to plan (!)... I'll be speaking at Greenbelt at these times: Slot 1...</description>
-            <guid isPermaLink="true">http://maggidawn.typepad.com/maggidawn/2005/07/greenbelt.html</guid>
-            <pubDate>Mon, 18 Jul 2005 02:11:42 GMT</pubDate>
-            <category>James</category>
-            <tapi:linkcreated>2005-07-11 02:08:12</tapi:linkcreated>
-            <comments>http://www.technorati.com/cosmos/search.html?url=http%3A%2F%2Fmaggidawn.typepad.com%2Fmaggidawn%2F2005%2F07%2Fgreenbelt.html</comments>
-            <tapi:inboundblogs>190</tapi:inboundblogs>
-            <tapi:inboundlinks>237</tapi:inboundlinks>
-            <source url="http://maggidawn.typepad.com/maggidawn/index.rdf">maggi dawn</source>
-        </item>
-
-        <item>
-            <title>Walking along the Greenbelt</title>
-            <link>http://pictureshomeless.blogspot.com/2005/06/walking-along-greenbelt.html</link>
-            <description>[IMG] Photo of homeless man walking near the greenbelt in Boise, Idaho Tags: photo homeless greenbelt Boise Idaho picture</description>
-            <guid isPermaLink="true">http://pictureshomeless.blogspot.com/2005/06/walking-along-greenbelt.html</guid>
-            <pubDate>Tue, 28 Jun 2005 01:41:24 GMT</pubDate>
-            <tapi:linkcreated>2005-06-26 17:24:03</tapi:linkcreated>
-            <comments>http://www.technorati.com/cosmos/search.html?url=http%3A%2F%2Fpictureshomeless.blogspot.com%2F2005%2F06%2Fwalking-along-greenbelt.html</comments>
-            <tapi:inboundblogs>2</tapi:inboundblogs>
-            <tapi:inboundlinks>2</tapi:inboundlinks>
-        </item>
-
-    </channel>
-</rss>
diff --git a/plugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc b/plugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc
deleted file mode 100755 (executable)
index e662d26..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-# -*- rnc -*-
-# RELAX NG Compact Syntax Grammar for the
-# Atom Format Specification Version 11
-
-namespace atom = "http://www.w3.org/2005/Atom"
-namespace xhtml = "http://www.w3.org/1999/xhtml"
-namespace s = "http://www.ascc.net/xml/schematron"
-namespace local = ""
-
-start = atomFeed | atomEntry
-
-# Common attributes
-
-atomCommonAttributes =
-   attribute xml:base { atomUri }?,
-   attribute xml:lang { atomLanguageTag }?,
-   undefinedAttribute*
-
-# Text Constructs
-
-atomPlainTextConstruct =
-   atomCommonAttributes,
-   attribute type { "text" | "html" }?,
-   text
-
-atomXHTMLTextConstruct =
-   atomCommonAttributes,
-   attribute type { "xhtml" },
-   xhtmlDiv
-
-atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
-
-# Person Construct
-
-atomPersonConstruct =
-   atomCommonAttributes,
-   (element atom:name { text }
-    & element atom:uri { atomUri }?
-    & element atom:email { atomEmailAddress }?
-    & extensionElement*)
-
-# Date Construct
-
-atomDateConstruct =
-   atomCommonAttributes,
-   xsd:dateTime
-
-# atom:feed
-
-atomFeed =
-   [
-      s:rule [
-         context = "atom:feed"
-         s:assert [
-            test = "atom:author or not(atom:entry[not(atom:author)])"
-            "An atom:feed must have an atom:author unless all "
-            ~ "of its atom:entry children have an atom:author."
-         ]
-      ]
-   ]
-   element atom:feed {
-      atomCommonAttributes,
-      (atomAuthor*
-       & atomCategory*
-       & atomContributor*
-       & atomGenerator?
-       & atomIcon?
-       & atomId
-       & atomLink*
-       & atomLogo?
-       & atomRights?
-       & atomSubtitle?
-       & atomTitle
-       & atomUpdated
-       & extensionElement*),
-      atomEntry*
-   }
-
-# atom:entry
-
-atomEntry =
-   [
-      s:rule [
-         context = "atom:entry"
-         s:assert [
-            test = "atom:link[@rel='alternate'] "
-            ~ "or atom:link[not(@rel)] "
-            ~ "or atom:content"
-            "An atom:entry must have at least one atom:link element "
-            ~ "with a rel attribute of 'alternate' "
-            ~ "or an atom:content."
-         ]
-      ]
-      s:rule [
-         context = "atom:entry"
-         s:assert [
-            test = "atom:author or "
-            ~ "../atom:author or atom:source/atom:author"
-            "An atom:entry must have an atom:author "
-            ~ "if its feed does not."
-         ]
-      ]
-   ]
-   element atom:entry {
-      atomCommonAttributes,
-      (atomAuthor*
-       & atomCategory*
-       & atomContent?
-       & atomContributor*
-       & atomId
-       & atomLink*
-       & atomPublished?
-       & atomRights?
-       & atomSource?
-       & atomSummary?
-       & atomTitle
-       & atomUpdated
-       & extensionElement*)
-   }
-
-# atom:content
-
-atomInlineTextContent =
-   element atom:content {
-      atomCommonAttributes,
-      attribute type { "text" | "html" }?,
-      (text)*
-   }
-
-atomInlineXHTMLContent =
-   element atom:content {
-      atomCommonAttributes,
-      attribute type { "xhtml" },
-      xhtmlDiv
-   }
-
-atomInlineOtherContent =
-   element atom:content {
-      atomCommonAttributes,
-      attribute type { atomMediaType }?,
-      (text|anyElement)*
-   }
-
-atomOutOfLineContent =
-   element atom:content {
-      atomCommonAttributes,
-      attribute type { atomMediaType }?,
-      attribute src { atomUri },
-      empty
-   }
-
-atomContent = atomInlineTextContent
- | atomInlineXHTMLContent
- | atomInlineOtherContent
- | atomOutOfLineContent
-
-# atom:author
-
-atomAuthor = element atom:author { atomPersonConstruct }
-
-# atom:category
-
-atomCategory =
-   element atom:category {
-      atomCommonAttributes,
-      attribute term { text },
-      attribute scheme { atomUri }?,
-      attribute label { text }?,
-      undefinedContent
-   }
-
-# atom:contributor
-
-atomContributor = element atom:contributor { atomPersonConstruct }
-
-# atom:generator
-
-atomGenerator = element atom:generator {
-   atomCommonAttributes,
-   attribute uri { atomUri }?,
-   attribute version { text }?,
-   text
-}
-
-# atom:icon
-
-atomIcon = element atom:icon {
-   atomCommonAttributes,
-   (atomUri)
-}
-
-# atom:id
-
-atomId = element atom:id {
-   atomCommonAttributes,
-   (atomUri)
-}
-
-# atom:logo
-
-atomLogo = element atom:logo {
-   atomCommonAttributes,
-   (atomUri)
-}
-
-# atom:link
-
-atomLink =
-   element atom:link {
-      atomCommonAttributes,
-      attribute href { atomUri },
-      attribute rel { atomNCName | atomUri }?,
-      attribute type { atomMediaType }?,
-      attribute hreflang { atomLanguageTag }?,
-      attribute title { text }?,
-      attribute length { text }?,
-      undefinedContent
-   }
-
-# atom:published
-
-atomPublished = element atom:published { atomDateConstruct }
-
-# atom:rights
-
-atomRights = element atom:rights { atomTextConstruct }
-
-# atom:source
-
-atomSource =
-   element atom:source {
-      atomCommonAttributes,
-      (atomAuthor*
-       & atomCategory*
-       & atomContributor*
-       & atomGenerator?
-       & atomIcon?
-       & atomId?
-       & atomLink*
-       & atomLogo?
-       & atomRights?
-       & atomSubtitle?
-       & atomTitle?
-       & atomUpdated?
-       & extensionElement*)
-   }
-
-# atom:subtitle
-
-atomSubtitle = element atom:subtitle { atomTextConstruct }
-
-# atom:summary
-
-atomSummary = element atom:summary { atomTextConstruct }
-
-# atom:title
-
-atomTitle = element atom:title { atomTextConstruct }
-
-# atom:updated
-
-atomUpdated = element atom:updated { atomDateConstruct }
-
-# Low-level simple types
-
-atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" }
-
-# Whatever a media type is, it contains at least one slash
-atomMediaType = xsd:string { pattern = ".+/.+" }
-
-# As defined in RFC 3066
-atomLanguageTag = xsd:string {
-   pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
-}
-
-# Unconstrained; it's not entirely clear how IRI fit into
-# xsd:anyURI so let's not try to constrain it here
-atomUri = text
-
-# Whatever an email address is, it contains at least one @
-atomEmailAddress = xsd:string { pattern = ".+@.+" }
-
-# Simple Extension
-
-simpleExtensionElement =
-   element * - atom:* {
-      text
-   }
-
-# Structured Extension
-
-structuredExtensionElement =
-   element * - atom:* {
-      (attribute * { text }+,
-         (text|anyElement)*)
-    | (attribute * { text }*,
-       (text?, anyElement+, (text|anyElement)*))
-   }
-
-# Other Extensibility
-
-extensionElement =
-   simpleExtensionElement | structuredExtensionElement
-
-undefinedAttribute =
-  attribute * - (xml:base | xml:lang | local:*) { text }
-
-undefinedContent = (text|anyForeignElement)*
-
-anyElement =
-   element * {
-      (attribute * { text }
-       | text
-       | anyElement)*
-   }
-
-anyForeignElement =
-   element * - atom:* {
-      (attribute * { text }
-       | text
-       | anyElement)*
-   }
-
-# XHTML
-
-anyXHTML = element xhtml:* {
-   (attribute * { text }
-    | text
-    | anyXHTML)*
-}
-
-xhtmlDiv = element xhtml:div {
-   (attribute * { text }
-    | text
-    | anyXHTML)*
-}
-
-# EOF
\ No newline at end of file
diff --git a/plugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc b/plugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc
deleted file mode 100755 (executable)
index 7250947..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
-<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
-<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
-
-<grammar xmlns='http://relaxng.org/ns/structure/1.0'
-        xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
-        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
-        ns='http://purl.org/rss/1.0/'
-        datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'>
-
-    <start>
-        <element name='RDF' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-            <ref name='RDFContent'/>
-        </element>
-    </start>   
-
-    <define name='RDFContent' ns='http://purl.org/rss/1.0/'>
-        <interleave>
-            <element name='channel'>
-                <ref name='channelContent'/>
-            </element>
-            <optional>
-                <element name='image'><ref name='imageContent'/></element>
-            </optional>
-            <oneOrMore>
-                <element name='item'><ref name='itemContent'/></element>
-            </oneOrMore>
-        </interleave>
-    </define>
-
-     <define name='channelContent' combine="interleave">
-        <interleave>
-            <element name='title'><data type='string'/></element>
-            <element name='link'><data type='anyURI'/></element>
-            <element name='description'><data type='string'/></element>
-            <element name='image'>
-                <attribute name='resource' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-                    <data type='anyURI'/>
-                </attribute>
-            </element>
-            <element name='items'>
-                    <ref name='itemsContent'/>
-            </element>
-            <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-                <data type='anyURI'/>
-            </attribute>
-        </interleave>
-    </define>
-    
-        <define name="itemsContent">
-            <element name="Seq" ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-                <oneOrMore>
-                    <element name="li" ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-                        <choice>
-                            <attribute name='resource'>    <!-- Why doesn't RDF/RSS1.0 ns qualify this attribute? -->
-                                <data type='anyURI'/>
-                            </attribute>
-                            <attribute name='resource' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-                                <data type='anyURI'/>
-                            </attribute>
-                        </choice>
-                    </element>
-                </oneOrMore>
-            </element>
-        </define>
-        
-    <define name='imageContent'>
-        <interleave>
-            <element name='title'><data type='string'/></element>
-            <element name='link'><data type='anyURI'/></element>
-            <element name='url'><data type='anyURI'/></element>
-            <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-                <data type='anyURI'/>
-            </attribute>
-        </interleave>
-    </define>
-
-    <define name='itemContent'>
-        <interleave>
-            <element name='title'><data type='string'/></element>
-            <element name='link'><data type='anyURI'/></element>
-            <optional><element name='description'><data type='string'/></element></optional>
-            <ref name="anyThing"/>
-            <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
-                <data type='anyURI'/>
-            </attribute>
-        </interleave>
-    </define>            
-            
-
-        <define name='anyThing'>
-            <zeroOrMore>
-                <choice>
-                    <text/>
-                    <element>
-                        <anyName>
-                            <except>
-                                <nsName/>
-                            </except>
-                        </anyName>
-                        <ref name='anyThing'/>
-                        <zeroOrMore>
-                            <attribute>
-                              <anyName/>
-                            </attribute>
-                        </zeroOrMore>
-                    </element>
-                </choice>
-            </zeroOrMore>
-            </define>
-            
-</grammar>
diff --git a/plugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc b/plugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc
deleted file mode 100755 (executable)
index c863376..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  RELAX NG Compact Schema for RSS 1.1
-  Sean B. Palmer, inamidst.com
-  Christopher Schmidt, crschmidt.net
-  License: This schema is in the public domain
--->
-<grammar xmlns:rss="http://purl.org/net/rss1.1#" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ns="http://purl.org/net/rss1.1#" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-  <start>
-    <ref name="Channel"/>
-  </start>
-  <define name="Channel">
-    <a:documentation>http://purl.org/net/rss1.1#Channel</a:documentation>
-    <element name="Channel">
-      <ref name="Channel.content"/>
-
-    </element>
-  </define>
-  <define name="Channel.content">
-    <optional>
-      <ref name="AttrXMLLang"/>
-    </optional>
-    <optional>
-      <ref name="AttrXMLBase"/>
-    </optional>
-
-    <ref name="AttrRDFAbout"/>
-    <interleave>
-      <ref name="title"/>
-      <ref name="link"/>
-      <ref name="description"/>
-      <optional>
-        <ref name="image"/>
-      </optional>
-      <zeroOrMore>
-
-        <ref name="Any"/>
-      </zeroOrMore>
-      <ref name="items"/>
-    </interleave>
-  </define>
-  <define name="title">
-    <a:documentation>http://purl.org/net/rss1.1#title</a:documentation>
-    <element name="title">
-
-      <ref name="title.content"/>
-    </element>
-  </define>
-  <define name="title.content">
-    <optional>
-      <ref name="AttrXMLLang"/>
-    </optional>
-    <text/>
-  </define>
-
-  <define name="link">
-    <a:documentation>http://purl.org/net/rss1.1#link</a:documentation>
-    <element name="link">
-      <ref name="link.content"/>
-    </element>
-  </define>
-  <define name="link.content">
-    <data type="anyURI"/>
-
-  </define>
-  <define name="description">
-    <a:documentation>http://purl.org/net/rss1.1#description</a:documentation>
-    <element name="description">
-      <ref name="description.content"/>
-    </element>
-  </define>
-  <define name="description.content">
-
-    <optional>
-      <ref name="AttrXMLLang"/>
-    </optional>
-    <text/>
-  </define>
-  <define name="image">
-    <a:documentation>http://purl.org/net/rss1.1#image</a:documentation>
-    <element name="image">
-
-      <ref name="image.content"/>
-    </element>
-  </define>
-  <define name="image.content">
-    <optional>
-      <ref name="AttrXMLLang"/>
-    </optional>
-    <ref name="AttrRDFResource"/>
-    <interleave>
-
-      <ref name="title"/>
-      <optional>
-        <ref name="link"/>
-      </optional>
-      <ref name="url"/>
-      <zeroOrMore>
-        <ref name="Any"/>
-      </zeroOrMore>
-    </interleave>
-
-  </define>
-  <define name="url">
-    <a:documentation>http://purl.org/net/rss1.1#url</a:documentation>
-    <element name="url">
-      <ref name="url.content"/>
-    </element>
-  </define>
-  <define name="url.content">
-
-    <data type="anyURI"/>
-  </define>
-  <define name="items">
-    <a:documentation>http://purl.org/net/rss1.1#items</a:documentation>
-    <element name="items">
-      <ref name="items.content"/>
-    </element>
-  </define>
-
-  <define name="items.content">
-    <optional>
-      <ref name="AttrXMLLang"/>
-    </optional>
-    <ref name="AttrRDFCollection"/>
-    <zeroOrMore>
-      <ref name="item"/>
-    </zeroOrMore>
-  </define>
-
-  <define name="item">
-    <a:documentation>http://purl.org/net/rss1.1#item</a:documentation>
-    <element name="item">
-      <ref name="item.content"/>
-    </element>
-  </define>
-  <define name="item.content">
-    <optional>
-
-      <ref name="AttrXMLLang"/>
-    </optional>
-    <ref name="AttrRDFAbout"/>
-    <interleave>
-      <ref name="title"/>
-      <ref name="link"/>
-      <optional>
-        <ref name="description"/>
-      </optional>
-
-      <optional>
-        <ref name="image"/>
-      </optional>
-      <zeroOrMore>
-        <ref name="Any"/>
-      </zeroOrMore>
-    </interleave>
-  </define>
-  <define name="Any">
-
-    <a:documentation>http://purl.org/net/rss1.1#Any</a:documentation>
-    <element>
-      <anyName>
-        <except>
-          <nsName/>
-        </except>
-      </anyName>
-      <ref name="Any.content"/>
-
-    </element>
-  </define>
-  <define name="Any.content">
-    <zeroOrMore>
-      <attribute>
-        <anyName>
-          <except>
-            <nsName/>
-            <nsName ns=""/>
-
-          </except>
-        </anyName>
-      </attribute>
-    </zeroOrMore>
-    <mixed>
-      <zeroOrMore>
-        <ref name="Any"/>
-      </zeroOrMore>
-    </mixed>
-
-  </define>
-  <define name="AttrXMLLang">
-    <attribute name="xml:lang">
-      <data type="language"/>
-    </attribute>
-  </define>
-  <define name="AttrXMLBase">
-    <attribute name="xml:base">
-      <data type="anyURI"/>
-
-    </attribute>
-  </define>
-  <define name="AttrRDFAbout">
-    <attribute name="rdf:about">
-      <data type="anyURI"/>
-    </attribute>
-  </define>
-  <define name="AttrRDFResource">
-    <attribute name="rdf:parseType">
-
-      <value>Resource</value>
-    </attribute>
-  </define>
-  <define name="AttrRDFCollection">
-    <attribute name="rdf:parseType">
-      <value>Collection</value>
-    </attribute>
-  </define>
-
-</grammar>
diff --git a/plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch b/plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch
deleted file mode 100644 (file)
index c53bd97..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/htdocs/lib/pear/XML/Feed/Parser/RSS2.php b/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
-index c5d79d1..308a4ab 100644
---- a/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
-+++ b/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
-@@ -321,7 +321,8 @@ class XML_Feed_Parser_RSS2 extends XML_Feed_Parser_Type
-      */
-     function getLink($offset, $attribute = 'href', $params = array())
-     {
--        $links = $this->model->getElementsByTagName('link');
-+        $xPath = new DOMXPath($this->model);
-+        $links = $xPath->query('//link');
-         if ($links->length <= $offset) {
-             return false;
diff --git a/plugins/FeedSub/feeddiscovery.php b/plugins/FeedSub/feeddiscovery.php
deleted file mode 100644 (file)
index 35edaca..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php
-/*
- * 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); }
-
-class FeedSubBadURLException extends FeedSubException
-{
-}
-
-class FeedSubBadResponseException extends FeedSubException
-{
-}
-
-class FeedSubEmptyException extends FeedSubException
-{
-}
-
-class FeedSubBadHTMLException extends FeedSubException
-{
-}
-
-class FeedSubUnrecognizedTypeException extends FeedSubException
-{
-}
-
-class FeedSubNoFeedException extends FeedSubException
-{
-}
-
-class FeedDiscovery
-{
-    public $uri;
-    public $type;
-    public $body;
-
-
-    public function feedMunger()
-    {
-        require_once 'XML/Feed/Parser.php';
-        $feed = new XML_Feed_Parser($this->body, false, false, true); // @fixme
-        return new FeedMunger($feed, $this->uri);
-    }
-
-    /**
-     * @param string $url
-     * @param bool $htmlOk
-     * @return string with validated URL
-     * @throws FeedSubBadURLException
-     * @throws FeedSubBadHtmlException
-     * @throws FeedSubNoFeedException
-     * @throws FeedSubEmptyException
-     * @throws FeedSubUnrecognizedTypeException
-     */
-    function discoverFromURL($url, $htmlOk=true)
-    {
-        try {
-            $client = new HTTPClient();
-            $response = $client->get($url);
-        } catch (HTTP_Request2_Exception $e) {
-            throw new FeedSubBadURLException($e);
-        }
-
-        if ($htmlOk) {
-            $type = $response->getHeader('Content-Type');
-            $isHtml = preg_match('!^(text/html|application/xhtml\+xml)!i', $type);
-            if ($isHtml) {
-                $target = $this->discoverFromHTML($response->getUrl(), $response->getBody());
-                if (!$target) {
-                    throw new FeedSubNoFeedException($url);
-                }
-                return $this->discoverFromURL($target, false);
-            }
-        }
-        
-        return $this->initFromResponse($response);
-    }
-    
-    function initFromResponse($response)
-    {
-        if (!$response->isOk()) {
-            throw new FeedSubBadResponseException($response->getCode());
-        }
-
-        $sourceurl = $response->getUrl();
-        $body = $response->getBody();
-        if (!$body) {
-            throw new FeedSubEmptyException($sourceurl);
-        }
-
-        $type = $response->getHeader('Content-Type');
-        if (preg_match('!^(text/xml|application/xml|application/(rss|atom)\+xml)!i', $type)) {
-            $this->uri = $sourceurl;
-            $this->type = $type;
-            $this->body = $body;
-            return true;
-        } else {
-            common_log(LOG_WARNING, "Unrecognized feed type $type for $sourceurl");
-            throw new FeedSubUnrecognizedTypeException($type);
-        }
-    }
-
-    /**
-     * @param string $url source URL, used to resolve relative links
-     * @param string $body HTML body text
-     * @return mixed string with URL or false if no target found
-     */
-    function discoverFromHTML($url, $body)
-    {
-        // DOMDocument::loadHTML may throw warnings on unrecognized elements.
-        $old = error_reporting(error_reporting() & ~E_WARNING);
-        $dom = new DOMDocument();
-        $ok = $dom->loadHTML($body);
-        error_reporting($old);
-
-        if (!$ok) {
-            throw new FeedSubBadHtmlException();
-        }
-
-        // Autodiscovery links may be relative to the page's URL or <base href>
-        $base = false;
-        $nodes = $dom->getElementsByTagName('base');
-        for ($i = 0; $i < $nodes->length; $i++) {
-            $node = $nodes->item($i);
-            if ($node->hasAttributes()) {
-                $href = $node->attributes->getNamedItem('href');
-                if ($href) {
-                    $base = trim($href->value);
-                }
-            }
-        }
-        if ($base) {
-            $base = $this->resolveURI($base, $url);
-        } else {
-            $base = $url;
-        }
-
-        // Ok... now on to the links!
-        // @fixme merge with the munger link checks
-        $nodes = $dom->getElementsByTagName('link');
-        for ($i = 0; $i < $nodes->length; $i++) {
-            $node = $nodes->item($i);
-            if ($node->hasAttributes()) {
-                $rel = $node->attributes->getNamedItem('rel');
-                $type = $node->attributes->getNamedItem('type');
-                $href = $node->attributes->getNamedItem('href');
-                if ($rel && $type && $href) {
-                    $rel = trim($rel->value);
-                    $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);
-                    }
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Resolve a possibly relative URL against some absolute base URL
-     * @param string $rel relative or absolute URL
-     * @param string $base absolute URL
-     * @return string absolute URL, or original URL if could not be resolved.
-     */
-    function resolveURI($rel, $base)
-    {
-        require_once "Net/URL2.php";
-        try {
-            $relUrl = new Net_URL2($rel);
-            if ($relUrl->isAbsolute()) {
-                return $rel;
-            }
-            $baseUrl = new Net_URL2($base);
-            $absUrl = $baseUrl->resolve($relUrl);
-            return $absUrl->getURL();
-        } catch (Exception $e) {
-            common_log(LOG_WARNING, 'Unable to resolve relative link "' .
-                $rel . '" against base "' . $base . '": ' . $e->getMessage());
-            return $rel;
-        }
-    }
-}
diff --git a/plugins/FeedSub/feedinfo.php b/plugins/FeedSub/feedinfo.php
deleted file mode 100644 (file)
index b166bd6..0000000
+++ /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 (file)
index e9b53d2..0000000
+++ /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/FeedSub/feedmunger.php b/plugins/FeedSub/feedmunger.php
deleted file mode 100644 (file)
index f3618b8..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-/*
- * 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); }
-
-class FeedSubPreviewNotice extends Notice
-{
-    protected $fetched = true;
-
-    function __construct($profile)
-    {
-        //parent::__construct(); // uhhh?
-        $this->profile = $profile;
-    }
-    
-    function getProfile()
-    {
-        return $this->profile;
-    }
-    
-    function find()
-    {
-        return true;
-    }
-    
-    function fetch()
-    {
-        $got = $this->fetched;
-        $this->fetched = false;
-        return $got;
-    }
-}
-
-class FeedSubPreviewProfile extends Profile
-{
-    function getAvatar($width, $height=null)
-    {
-        return new FeedSubPreviewAvatar($width, $height);
-    }
-}
-
-class FeedSubPreviewAvatar extends Avatar
-{
-    function displayUrl() {
-        return common_path('plugins/FeedSub/images/48px-Feed-icon.svg.png');
-    }
-}
-
-class FeedMunger
-{
-    /**
-     * @param XML_Feed_Parser $feed
-     */
-    function __construct($feed, $url=null)
-    {
-        $this->feed = $feed;
-        $this->url = $url;
-    }
-    
-    function feedinfo()
-    {
-        $feedinfo = new Feedinfo();
-        $feedinfo->feeduri = $this->url;
-        $feedinfo->homeuri = $this->feed->link;
-        $feedinfo->huburi = $this->getHubLink();
-        return $feedinfo;
-    }
-
-    function getAtomLink($item, $attribs=array())
-    {
-        // XML_Feed_Parser gets confused by multiple <link> elements.
-        $dom = $item->model;
-
-        // Note that RSS feeds would embed an <atom:link> so this should work for both.
-        /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
-        // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
-        $links = $dom->getElementsByTagNameNS('http://www.w3.org/2005/Atom', 'link');
-        for ($i = 0; $i < $links->length; $i++) {
-            $node = $links->item($i);
-            if ($node->hasAttributes()) {
-                $href = $node->attributes->getNamedItem('href');
-                if ($href) {
-                    $matches = 0;
-                    foreach ($attribs as $name => $val) {
-                        $attrib = $node->attributes->getNamedItem($name);
-                        if ($attrib && $attrib->value == $val) {
-                            $matches++;
-                        }
-                    }
-                    if ($matches == count($attribs)) {
-                        return $href->value;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    function getRssLink($item)
-    {
-        // XML_Feed_Parser gets confused by multiple <link> elements.
-        $dom = $item->model;
-
-        // Note that RSS feeds would embed an <atom:link> so this should work for both.
-        /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
-        // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
-        $links = $dom->getElementsByTagName('link');
-        for ($i = 0; $i < $links->length; $i++) {
-            $node = $links->item($i);
-            if (!$node->hasAttributes()) {
-                return $node->textContent;
-            }
-        }
-        return false;
-    }
-
-    function getAltLink($item)
-    {
-        // Check for an atom link...
-        $link = $this->getAtomLink($item, array('rel' => 'alternate', 'type' => 'text/html'));
-        if (!$link) {
-            $link = $this->getRssLink($item);
-        }
-        return $link;
-    }
-
-    function getHubLink()
-    {
-        return $this->getAtomLink($this->feed, array('rel' => 'hub'));
-    }
-
-    function profile($preview=false)
-    {
-        if ($preview) {
-            $profile = new FeedSubPreviewProfile();
-        } else {
-            $profile = new Profile();
-        }
-        
-        // @todo validate/normalize nick?
-        $profile->nickname   = $this->feed->title;
-        $profile->fullname   = $this->feed->title;
-        $profile->homepage   = $this->getAltLink($this->feed);
-        $profile->bio        = $this->feed->description;
-        $profile->profileurl = $this->getAltLink($this->feed);
-        
-        // @todo tags from categories
-        // @todo lat/lon/location?
-
-        return $profile;
-    }
-
-    function notice($index=1, $preview=false)
-    {
-        $entry = $this->feed->getEntryByOffset($index);
-        if (!$entry) {
-            return null;
-        }
-        
-        if ($preview) {
-            $notice = new FeedSubPreviewNotice($this->profile(true));
-            $notice->id = -1;
-        } else {
-            $notice = new Notice();
-        }
-
-        $link = $this->getAltLink($entry);
-        $notice->uri = $link;
-        $notice->url = $link;
-        $notice->content = $this->noticeFromEntry($entry);
-        $notice->rendered = common_render_content($notice->content, $notice);
-        $notice->created = common_sql_date($entry->updated); // @fixme
-        $notice->is_local = Notice::GATEWAY;
-        $notice->source = 'feed';
-        
-        return $notice;
-    }
-
-    /**
-     * @param XML_Feed_Type $entry
-     * @return string notice text, within post size limit
-     */
-    function noticeFromEntry($entry)
-    {
-        $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);
-            $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);
-        }
-        
-        return $out;
-    }
-}
diff --git a/plugins/FeedSub/images/24px-Feed-icon.svg.png b/plugins/FeedSub/images/24px-Feed-icon.svg.png
deleted file mode 100644 (file)
index 3172258..0000000
Binary files a/plugins/FeedSub/images/24px-Feed-icon.svg.png and /dev/null differ
diff --git a/plugins/FeedSub/images/48px-Feed-icon.svg.png b/plugins/FeedSub/images/48px-Feed-icon.svg.png
deleted file mode 100644 (file)
index bd1da4f..0000000
Binary files a/plugins/FeedSub/images/48px-Feed-icon.svg.png and /dev/null differ
diff --git a/plugins/FeedSub/images/96px-Feed-icon.svg.png b/plugins/FeedSub/images/96px-Feed-icon.svg.png
deleted file mode 100644 (file)
index bf16571..0000000
Binary files a/plugins/FeedSub/images/96px-Feed-icon.svg.png and /dev/null differ
diff --git a/plugins/FeedSub/images/README b/plugins/FeedSub/images/README
deleted file mode 100644 (file)
index d9379c2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Feed icon rendered from http://commons.wikimedia.org/wiki/File:Feed-icon.svg
-
-Originally distributed by the Mozilla Foundation under a MPL/GPL/LGPL tri-license:
-
-http://www.mozilla.org/MPL/boilerplate-1.1/mpl-tri-license-html
diff --git a/plugins/FeedSub/locale/FeedSub.po b/plugins/FeedSub/locale/FeedSub.po
deleted file mode 100644 (file)
index dedc018..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:38-0800\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"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: tests/gettext-speedtest.php:57 FeedSubPlugin.php:76
-msgid "Feeds"
-msgstr ""
-
-#: FeedSubPlugin.php:77
-msgid "Feed subscription options"
-msgstr ""
-
-#: feedmunger.php:215
-#, php-format
-msgid "New post: \"%1$s\" %2$s"
-msgstr ""
-
-#: actions/feedsubsettings.php:41
-msgid "Feed subscriptions"
-msgstr ""
-
-#: actions/feedsubsettings.php:52
-msgid ""
-"You can subscribe to feeds from other sites; updates will appear in your "
-"personal timeline."
-msgstr ""
-
-#: actions/feedsubsettings.php:96
-msgid "Subscribe"
-msgstr ""
-
-#: actions/feedsubsettings.php:98
-msgid "Continue"
-msgstr ""
-
-#: actions/feedsubsettings.php:151
-msgid "Empty feed URL!"
-msgstr ""
-
-#: actions/feedsubsettings.php:161
-msgid "Invalid URL or could not reach server."
-msgstr ""
-
-#: actions/feedsubsettings.php:164
-msgid "Cannot read feed; server returned error."
-msgstr ""
-
-#: actions/feedsubsettings.php:167
-msgid "Cannot read feed; server returned an empty page."
-msgstr ""
-
-#: actions/feedsubsettings.php:170
-msgid "Bad HTML, could not find feed link."
-msgstr ""
-
-#: actions/feedsubsettings.php:173
-msgid "Could not find a feed linked from this URL."
-msgstr ""
-
-#: actions/feedsubsettings.php:176
-msgid "Not a recognized feed type."
-msgstr ""
-
-#: actions/feedsubsettings.php:180
-msgid "Bad feed URL."
-msgstr ""
-
-#: actions/feedsubsettings.php:188
-msgid "Feed is not PuSH-enabled; cannot subscribe."
-msgstr ""
-
-#: actions/feedsubsettings.php:208
-msgid "Feed subscription failed! Bad response from hub."
-msgstr ""
-
-#: actions/feedsubsettings.php:218
-msgid "Already subscribed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:220
-msgid "Feed subscribed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:222
-msgid "Feed subscription failed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:231
-msgid "Previewing feed:"
-msgstr ""
diff --git a/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po b/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po
deleted file mode 100644 (file)
index f17dfa5..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 14:14-0800\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"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: FeedSubPlugin.php:77
-msgid "Feeds"
-msgstr "Flux"
-
-#: FeedSubPlugin.php:78
-msgid "Feed subscription options"
-msgstr "Préférences pour abonnement flux"
-
-#: feedmunger.php:215
-#, php-format
-msgid "New post: \"%1$s\" %2$s"
-msgstr "Nouveau: \"%1$s\" %2$s"
-
-#: actions/feedsubsettings.php:41
-msgid "Feed subscriptions"
-msgstr "Abonnements aux fluxes"
-
-#: actions/feedsubsettings.php:52
-msgid ""
-"You can subscribe to feeds from other sites; updates will appear in your "
-"personal timeline."
-msgstr ""
-"Abonner aux fluxes RSS ou Atom des autres sites web; les temps se trouverair"
-"en votre flux personnel."
-
-#: actions/feedsubsettings.php:96
-msgid "Subscribe"
-msgstr "Abonner"
-
-#: actions/feedsubsettings.php:98
-msgid "Continue"
-msgstr "Prochaine"
-
-#: actions/feedsubsettings.php:151
-msgid "Empty feed URL!"
-msgstr ""
-
-#: actions/feedsubsettings.php:161
-msgid "Invalid URL or could not reach server."
-msgstr ""
-
-#: actions/feedsubsettings.php:164
-msgid "Cannot read feed; server returned error."
-msgstr ""
-
-#: actions/feedsubsettings.php:167
-msgid "Cannot read feed; server returned an empty page."
-msgstr ""
-
-#: actions/feedsubsettings.php:170
-msgid "Bad HTML, could not find feed link."
-msgstr ""
-
-#: actions/feedsubsettings.php:173
-msgid "Could not find a feed linked from this URL."
-msgstr ""
-
-#: actions/feedsubsettings.php:176
-msgid "Not a recognized feed type."
-msgstr ""
-
-#: actions/feedsubsettings.php:180
-msgid "Bad feed URL."
-msgstr ""
-
-#: actions/feedsubsettings.php:188
-msgid "Feed is not PuSH-enabled; cannot subscribe."
-msgstr ""
-
-#: actions/feedsubsettings.php:208
-msgid "Feed subscription failed! Bad response from hub."
-msgstr ""
-
-#: actions/feedsubsettings.php:218
-msgid "Already subscribed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:220
-msgid "Feed subscribed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:222
-msgid "Feed subscription failed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:231
-msgid "Previewing feed:"
-msgstr ""
diff --git a/plugins/FeedSub/tests/FeedDiscoveryTest.php b/plugins/FeedSub/tests/FeedDiscoveryTest.php
deleted file mode 100644 (file)
index 1c52497..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
-    print "This script must be run from the command line\n";
-    exit();
-}
-
-define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
-define('STATUSNET', true);
-define('LACONICA', true);
-
-require_once INSTALLDIR . '/lib/common.php';
-require_once INSTALLDIR . '/plugins/FeedSub/feedsub.php';
-
-class FeedDiscoveryTest extends PHPUnit_Framework_TestCase
-{
-    /**
-     * @dataProvider provider
-     *
-     */
-    public function testProduction($url, $html, $expected)
-    {
-        $sub = new FeedDiscovery();
-        $url = $sub->discoverFromHTML($url, $html);
-        $this->assertEquals($expected, $url);
-    }
-
-    static public function provider()
-    {
-        $sampleHeader = <<<END
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head profile="http://gmpg.org/xfn/11">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-
-<title>leŭksman  </title>
-
-<meta name="generator" content="WordPress 2.8.6" /> <!-- leave this for stats -->
-
-<link rel="stylesheet" href="http://leuksman.com/log/wp-content/themes/leuksman/style.css" type="text/css" media="screen" />
-<link rel="alternate" type="application/rss+xml" title="leŭksman RSS Feed" href="http://leuksman.com/log/feed/" />
-<link rel="pingback" href="http://leuksman.com/log/xmlrpc.php" />
-
-<meta name="viewport" content="width = 640" />
-
-<xmeta name="viewport" content="initial-scale=2.3, user-scalable=no" />
-
-<style type="text/css" media="screen">
-
-       #page { background: url("http://leuksman.com/log/wp-content/themes/leuksman/images/kubrickbg.jpg") repeat-y top; border: none; }
-
-</style>
-
-<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://leuksman.com/log/xmlrpc.php?rsd" />
-<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://leuksman.com/log/wp-includes/wlwmanifest.xml" /> 
-<link rel='index' title='leŭksman' href='http://leuksman.com/log' />
-<meta name="generator" content="WordPress 2.8.6" />
-</head>
-<body>
-</body>
-</html>
-END;
-        return array(
-                     array('http://example.com/',
-                           '<html><link rel="alternate" href="http://example.com/feed/rss" type="application/rss+xml">',
-                           'http://example.com/feed/rss'),
-                     array('http://example.com/atom',
-                           '<html><link rel="alternate" href="http://example.com/feed/atom" type="application/atom+xml">',
-                           'http://example.com/feed/atom'),
-                     array('http://example.com/empty',
-                           '<html><link rel="alternate" href="http://example.com/index.pdf" type="application/pdf">',
-                           false),
-                     array('http://example.com/tagsoup',
-                           '<body><pre><LINK rel=alternate hRef=http://example.com/feed/rss type=application/rss+xml><fnork',
-                           'http://example.com/feed/rss'),
-                     // 'rel' attribute must be lowercase, alone per http://www.rssboard.org/rss-autodiscovery
-                     array('http://example.com/tagsoup2',
-                           '<body><pre><LINK rel=" feeders    alternate 467" hRef=http://example.com/feed/rss type=application/rss+xml><fnork',
-                           false),
-                     array('http://example.com/tagsoup3',
-                           '<body><pre><LINK rel=ALTERNATE hRef=http://example.com/feed/rss type=application/rss+xml><fnork',
-                           false),
-                     array('http://example.com/relative/link1',
-                           '<html><link rel="alternate" href="/feed/rss" type="application/rss+xml">',
-                           'http://example.com/feed/rss'),
-                     array('http://example.com/relative/link2',
-                           '<html><link rel="alternate" href="../feed/rss" type="application/rss+xml">',
-                           'http://example.com/feed/rss'),
-                     array('http://example.com/relative/link3',
-                           '<html><link rel="alternate" href="http:/feed/rss" type="application/rss+xml">',
-                           'http://example.com/feed/rss'),
-                     array('http://example.com/base/link1',
-                           '<html><link rel="alternate" href="/feed/rss" type="application/rss+xml"><base href="http://target.example.com/">',
-                           'http://target.example.com/feed/rss'),
-                     array('http://example.com/base/link2',
-                           '<html><link rel="alternate" href="feed/rss" type="application/rss+xml"><base href="http://target.example.com/">',
-                           'http://target.example.com/feed/rss'),
-                     array('http://example.com/base/link3',
-                           '<html><link rel="alternate" href="http:/feed/rss" type="application/rss+xml"><base href="http://target.example.com/">',
-                           'http://target.example.com/feed/rss'),
-                     // Trick question! There's a <base> but no href on it
-                     array('http://example.com/relative/fauxbase',
-                           '<html><link rel="alternate" href="../feed/rss" type="application/rss+xml"><base target="top">',
-                           'http://example.com/feed/rss'),
-                     // Actual WordPress blog header example
-                     array('http://leuksman.com/log/',
-                           $sampleHeader,
-                           'http://leuksman.com/log/feed/'));
-    }
-}
diff --git a/plugins/FeedSub/tests/FeedMungerTest.php b/plugins/FeedSub/tests/FeedMungerTest.php
deleted file mode 100644 (file)
index 0ce24c9..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
-    print "This script must be run from the command line\n";
-    exit();
-}
-
-define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
-define('STATUSNET', true);
-define('LACONICA', true);
-
-require_once INSTALLDIR . '/lib/common.php';
-require_once INSTALLDIR . '/plugins/FeedSub/feedsub.php';
-
-require_once 'XML/Feed/Parser.php';
-
-class FeedMungerTest extends PHPUnit_Framework_TestCase
-{
-    /**
-     * @dataProvider profileProvider
-     *
-     */
-    public function testProfiles($xml, $expected)
-    {
-        $feed = new XML_Feed_Parser($xml, false, false, true);
-        
-        $munger = new FeedMunger($feed);
-        $profile = $munger->profile();
-
-        foreach ($expected as $field => $val) {
-            $this->assertEquals($expected[$field], $profile->$field, "profile->$field");
-        }
-    }
-
-    static public function profileProvider()
-    {
-        return array(
-                     array(self::samplefeed(),
-                           array('nickname' => 'leŭksman', // @todo does this need to be asciified?
-                                 'fullname' => 'leŭksman',
-                                 'bio' => 'reticula, electronica, & oddities',
-                                 'homepage' => 'http://leuksman.com/log')));
-    }
-
-    /**
-     * @dataProvider noticeProvider
-     *
-     */
-    public function testNotices($xml, $entryIndex, $expected)
-    {
-        $feed = new XML_Feed_Parser($xml, false, false, true);
-        $entry = $feed->getEntryByOffset($entryIndex);
-
-        $munger = new FeedMunger($feed);
-        $notice = $munger->noticeFromEntry($entry);
-
-        $this->assertTrue(mb_strlen($notice) <= Notice::maxContent());
-        $this->assertEquals($expected, $notice);
-    }
-
-    static public function noticeProvider()
-    {
-        return array(
-                     array('<rss version="2.0"><channel><item><title>A fairly short title</title><link>http://example.com/short/link</link></item></channel></rss>', 0,
-                           'New post: "A fairly short title" http://example.com/short/link'),
-                     // Requires URL shortening ...
-                     array('<rss version="2.0"><channel><item><title>A fairly short title</title><link>http://example.com/but/a/very/long/link/indeed/this/is/far/too/long/for/mere/humans/to/comprehend/oh/my/gosh</link></item></channel></rss>', 0,
-                           'New post: "A fairly short title" http://ur1.ca/g2o1'),
-                     array('<rss version="2.0"><channel><item><title>A fairly long title in this case, which will have to get cut down at some point alongside its very long link. Really who even makes titles this long? It\'s just ridiculous imo...</title><link>http://example.com/but/a/very/long/link/indeed/this/is/far/too/long/for/mere/humans/to/comprehend/oh/my/gosh</link></item></channel></rss>', 0,
-                           'New post: "A fairly long title in this case, which will have to get cut down at some point alongside its very long li…" http://ur1.ca/g2o1'),
-                     // Some real sample feeds
-                     array(self::samplefeed(), 0,
-                           'New post: "Compiling PHP on Snow Leopard" http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/'),
-                     array(self::samplefeedBlogspot(), 0,
-                           'New post: "I love posting" http://briontest.blogspot.com/2009/11/i-love-posting.html'),
-                     array(self::samplefeedBlogspot(), 1,
-                           'New post: "Hey dude" http://briontest.blogspot.com/2009/11/hey-dude.html'),
-        );
-    }
-
-    static protected function samplefeed()
-    {
-        $xml = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
-        $samplefeed = $xml . <<<END
-<rss version="2.0"
-       xmlns:content="http://purl.org/rss/1.0/modules/content/"
-       xmlns:wfw="http://wellformedweb.org/CommentAPI/"
-       xmlns:dc="http://purl.org/dc/elements/1.1/"
-       xmlns:atom="http://www.w3.org/2005/Atom"
-       xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
-       xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
-       >
-
-<channel>
-       <title>leŭksman</title>
-       <atom:link href="http://leuksman.com/log/feed/" rel="self" type="application/rss+xml" />
-       <link>http://leuksman.com/log</link>
-       <description>reticula, electronica, &#38; oddities</description>
-
-       <lastBuildDate>Thu, 12 Nov 2009 17:44:42 +0000</lastBuildDate>
-       <generator>http://wordpress.org/?v=2.8.6</generator>
-       <language>en</language>
-       <sy:updatePeriod>hourly</sy:updatePeriod>
-       <sy:updateFrequency>1</sy:updateFrequency>
-                       <item>
-
-               <title>Compiling PHP on Snow Leopard</title>
-               <link>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/</link>
-               <comments>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/#comments</comments>
-               <pubDate>Thu, 12 Nov 2009 17:44:42 +0000</pubDate>
-               <dc:creator>brion</dc:creator>
-                               <category><![CDATA[apple]]></category>
-
-               <category><![CDATA[devel]]></category>
-
-               <guid isPermaLink="false">http://leuksman.com/log/?p=649</guid>
-               <description><![CDATA[If you&#8217;ve been having trouble compiling your own PHP installations on Mac OS X 10.6, here&#8217;s the secret to making it not suck! After running the configure script, edit the generated Makefile and make these fixes:
-
-Find the EXTRA_LIBS definition and add -lresolv to the end
-Find the EXE_EXT definition and remove .dSYM
-
-Standard make and make install [...]]]></description>
-                       <content:encoded><![CDATA[<p>If you&#8217;ve been having trouble compiling your own PHP installations on Mac OS X 10.6, here&#8217;s the secret to making it not suck! After running the configure script, edit the generated Makefile and make these fixes:</p>
-<ul>
-<li>Find the <strong>EXTRA_LIBS</strong> definition and add <strong>-lresolv</strong> to the end</li>
-<li>Find the <strong>EXE_EXT</strong> definition and remove <strong>.dSYM</strong></li>
-</ul>
-<p>Standard make and make install should work from here&#8230;</p>
-<p>For reference, here&#8217;s the whole configure line I currently use; MySQL is installed from the downloadable installer; other deps from MacPorts:</p>
-<p>&#8216;./configure&#8217; &#8216;&#8211;prefix=/opt/php52&#8242; &#8216;&#8211;with-mysql=/usr/local/mysql&#8217; &#8216;&#8211;with-zlib&#8217; &#8216;&#8211;with-bz2&#8242; &#8216;&#8211;enable-mbstring&#8217; &#8216;&#8211;enable-exif&#8217; &#8216;&#8211;enable-fastcgi&#8217; &#8216;&#8211;with-xmlrpc&#8217; &#8216;&#8211;with-xsl&#8217; &#8216;&#8211;with-readline=/opt/local&#8217; &#8211;without-iconv &#8211;with-gd &#8211;with-png-dir=/opt/local &#8211;with-jpeg-dir=/opt/local &#8211;with-curl &#8211;with-gettext=/opt/local &#8211;with-mysqli=/usr/local/mysql/bin/mysql_config &#8211;with-tidy=/opt/local &#8211;enable-pcntl &#8211;with-openssl</p>
-]]></content:encoded>
-                       <wfw:commentRss>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/feed/</wfw:commentRss>
-               <slash:comments>0</slash:comments>
-               </item>
-</channel>
-</rss>
-END;
-        return $samplefeed;
-    }
-    
-    static protected function samplefeedBlogspot()
-    {
-        return <<<END
-<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-7780083508531697167</id><updated>2009-11-19T12:56:11.233-08:00</updated><title type='text'>Brion's Cool Test Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7780083508531697167.post-8456671879000290677</id><published>2009-11-19T12:55:00.000-08:00</published><updated>2009-11-19T12:56:11.241-08:00</updated><title type='text'>I love posting</title><content type='html'>It's pretty awesome, if you like that sort of thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7780083508531697167-8456671879000290677?l=briontest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/8456671879000290677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://briontest.blogspot.com/2009/11/i-love-posting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8456671879000290677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8456671879000290677'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/2009/11/i-love-posting.html' title='I love posting'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05912464053145602436'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7780083508531697167.post-8202296917897346633</id><published>2009-11-18T13:52:00.001-08:00</published><updated>2009-11-18T13:52:48.444-08:00</updated><title type='text'>Hey dude</title><content type='html'>testingggggggggg&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7780083508531697167-8202296917897346633?l=briontest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/8202296917897346633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://briontest.blogspot.com/2009/11/hey-dude.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8202296917897346633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8202296917897346633'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/2009/11/hey-dude.html' title='Hey dude'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05912464053145602436'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>
-END;
-    }
-}
diff --git a/plugins/FeedSub/tests/gettext-speedtest.php b/plugins/FeedSub/tests/gettext-speedtest.php
deleted file mode 100644 (file)
index 8bbdf5e..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
-    print "This script must be run from the command line\n";
-    exit();
-}
-
-define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
-define('STATUSNET', true);
-define('LACONICA', true);
-
-require_once INSTALLDIR . '/scripts/commandline.inc';
-require_once INSTALLDIR . '/extlib/php-gettext/gettext.inc';
-
-common_init_locale("en_US");
-common_init_locale('fr');
-
-
-putenv("LANG=fr");
-putenv("LANGUAGE=fr");
-setlocale('fr.utf8');
-_setlocale('fr.utf8');
-
-_bindtextdomain("statusnet", INSTALLDIR . '/locale');
-_bindtextdomain("FeedSub", INSTALLDIR . '/plugins/FeedSub/locale');
-
-$times = 10000;
-$delta = array();
-
-$start = microtime(true);
-for($i = 0; $i < $times; $i++) {
-    $result = _("Send");
-}
-$delta["_"] = array((microtime(true) - $start) / $times, $result);
-
-$start = microtime(true);
-for($i = 0; $i < $times; $i++) {
-    $result = __("Send");
-}
-$delta["__"] = array((microtime(true) - $start) / $times, $result);
-
-$start = microtime(true);
-for($i = 0; $i < $times; $i++) {
-    $result = dgettext("FeedSub", "Feeds");
-}
-$delta["dgettext"] = array((microtime(true) - $start) / $times, $result);
-
-$start = microtime(true);
-for($i = 0; $i < $times; $i++) {
-    $result = _dgettext("FeedSub", "Feeds");
-}
-$delta["_dgettext"] = array((microtime(true) - $start) / $times, $result);
-
-
-$start = microtime(true);
-for($i = 0; $i < $times; $i++) {
-    $result = _m("Feeds");
-}
-$delta["_m"] = array((microtime(true) - $start) / $times, $result);
-
-
-$start = microtime(true);
-for($i = 0; $i < $times; $i++) {
-    $result = fake("Feeds");
-}
-$delta["fake"] = array((microtime(true) - $start) / $times, $result);
-
-foreach ($delta as $func => $bits) {
-    list($time, $result) = $bits;
-    $ms = $time * 1000.0;
-    printf("%10s %2.4fms %s\n", $func, $ms, $result);
-}
-
-
-function fake($str) {
-    return $str;
-}
-
index 2bc4b892bd6a287c9750c73060f7522f68db5bf5..c5e74fb4162a38efb35a2b37354caf63d32b4287 100644 (file)
@@ -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',
index 5c913836dccd7db6f6375e88bf24626ee596c8d2..cd2531fa727a8f3b7d4d2fd41ed645a8f3d4dc7d 100644 (file)
@@ -240,6 +240,8 @@ class MobileProfilePlugin extends WAP20Plugin
             return true;
         }
 
+        $action->cssLink('css/display.css');
+
         if (file_exists(Theme::file('css/mp-screen.css'))) {
             $action->cssLink('css/mp-screen.css', null, 'screen');
         } else {
@@ -256,6 +258,14 @@ class MobileProfilePlugin extends WAP20Plugin
     }
 
 
+    function onStartShowUAStyles($action) {
+        if (!$this->serveMobile) {
+            return true;
+        }
+
+        return false;
+    }
+
     function onStartShowHeader($action)
     {
         if (!$this->serveMobile) {
index 04fa5fb0021054e871bfd81673b2e15dd0a580eb..0fc801612be9d4848bc4318057c5ea29741d6fef 100644 (file)
@@ -1,15 +1,12 @@
 /** theme: mobile profile screen
  *
  * @package   StatusNet
- * @author Sarven Capadisli <csarven@status.net>
+ * @author    Sarven Capadisli <csarven@status.net>
  * @copyright 2009 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/
  */
 
-@import url(../../theme/base/css/display.css);
-@import url(../../theme/identica/css/display.css);
-
 #wrap {
 min-width:0;
 max-width:100%;
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
new file mode 100644 (file)
index 0000000..8444c3d
--- /dev/null
@@ -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/OStatus/README b/plugins/OStatus/README
new file mode 100644 (file)
index 0000000..cbf3adb
--- /dev/null
@@ -0,0 +1,24 @@
+Plugin to support importing updates from external RSS and Atom feeds into your timeline.
+
+Uses PubSubHubbub for push feed updates; currently non-PuSH feeds cannot be subscribed.
+
+Todo:
+* set feed icon avatar for actual profiles as well as for preview
+* use channel image and/or favicon for avatar?
+* garbage-collect subscriptions that are no longer being used
+* administrative way to kill feeds?
+* functional l10n
+* clean up subscription form look and workflow
+* use ajax for test/preview in subscription form
+* rssCloud support? (Does anything use it that doesn't support PuSH as well?)
+* possibly a polling daemon to support non-PuSH feeds?
+* likely problems with multiple feeds from the same site, such as category feeds on a blog
+  (currently each feed would publish a separate notice on a separate profile, but pointing to the same post URI.)
+  (could use the local URI I guess, but that's so icky!)
+* problems with Atom feeds that list <link rel="alternate" href="..."/> but don't have the type
+  (such as http://atomgen.appspot.com/feed/5 demo feed); currently it's not recognized and we end up with the feed's master URI
+* make it easier to see what you're subscribed to and unsub from things
+* saner treatment of fullname/nickname?
+* make use of tags/categories from feeds
+* update feed profile data when it changes
+* XML_Feed_Parser has major problems with category and link tags; consider replacing?
diff --git a/plugins/OStatus/actions/feedsubsettings.php b/plugins/OStatus/actions/feedsubsettings.php
new file mode 100644 (file)
index 0000000..6933c9b
--- /dev/null
@@ -0,0 +1,269 @@
+<?php
+/*
+ * 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); }
+
+class FeedSubSettingsAction extends ConnectSettingsAction
+{
+    protected $feedurl;
+    protected $preview;
+    protected $munger;
+
+    /**
+     * Title of the page
+     *
+     * @return string Title of the page
+     */
+
+    function title()
+    {
+        return _m('Feed subscriptions');
+    }
+
+    /**
+     * Instructions for use
+     *
+     * @return instructions for use
+     */
+
+    function getInstructions()
+    {
+        return _m('You can subscribe to feeds from other sites; ' .
+                  'updates will appear in your personal timeline.');
+    }
+
+    /**
+     * Content area of the page
+     *
+     * Shows a form for associating a Twitter account with this
+     * StatusNet account. Also lets the user set preferences.
+     *
+     * @return void
+     */
+
+    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');
+
+        if ($this->preview) {
+            $this->submit('subscribe', _m('Subscribe'));
+        } else {
+            $this->submit('validate', _m('Continue'));
+        }
+
+        $this->elementEnd('fieldset');
+
+        $this->elementEnd('form');
+
+        if ($this->preview) {
+            $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('validate')) {
+            $this->validateAndPreview();
+        } else 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 = trim($this->arg('feedurl'));
+        
+        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 == '' && !common_config('feedsub', 'nohub')) {
+            $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 (!$this->profile) {
+                throw new ServerException("Feed profile was not saved properly.");
+            }
+
+            // 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();
+
+            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 {
+                $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!'));
+                }
+            }
+        }
+    }
+
+    function validateAndPreview()
+    {
+        if ($this->validateFeed()) {
+            $this->preview = true;
+            $this->showForm(_m('Previewing feed:'));
+        }
+    }
+
+    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.');
+        }
+    }
+
+    function showScripts()
+    {
+        parent::showScripts();
+        $this->autofocus('feedurl');
+    }
+}
diff --git a/plugins/OStatus/actions/hostmeta.php b/plugins/OStatus/actions/hostmeta.php
new file mode 100644 (file)
index 0000000..850b8a0
--- /dev/null
@@ -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 (file)
index 0000000..bac2c4d
--- /dev/null
@@ -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 (file)
index 0000000..9774286
--- /dev/null
@@ -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/OStatus/actions/pushcallback.php b/plugins/OStatus/actions/pushcallback.php
new file mode 100644 (file)
index 0000000..2601a37
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/*
+ * 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); }
+
+
+class PushCallbackAction extends Action
+{
+    function handle()
+    {
+        parent::handle();
+        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+            $this->handlePost();
+        } else {
+            $this->handleGet();
+        }
+    }
+    
+    /**
+     * Handler for POST content updates from the hub
+     */
+    function handlePost()
+    {
+        $feedid = $this->arg('feed');
+        common_log(LOG_INFO, "POST for feed id $feedid");
+        if (!$feedid) {
+            throw new ServerException('Empty or invalid feed id', 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');
+        $profile->postUpdates($post, $hmac);
+    }
+    
+    /**
+     * Handler for GET verification requests from the hub
+     */
+    function handleGet()
+    {
+        $mode = $this->arg('hub_mode');
+        $topic = $this->arg('hub_topic');
+        $challenge = $this->arg('hub_challenge');
+        $lease_seconds = $this->arg('hub_lease_seconds');
+        $verify_token = $this->arg('hub_verify_token');
+        
+        if ($mode != 'subscribe' && $mode != 'unsubscribe') {
+            common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with mode \"$mode\"");
+            throw new ServerException("Bogus hub callback: bad mode", 404);
+        }
+        
+        $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);
+        }
+
+        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!
+        if ($mode == 'subscribe') {
+            common_log(LOG_INFO, __METHOD__ . ': sub confirmed');
+            $profile->confirmSubscribe($lease_seconds);
+        } else {
+            common_log(LOG_INFO, __METHOD__ . ": unsub confirmed; deleting sub record for $topic");
+            $profile->confirmUnsubscribe();
+        }
+        print $challenge;
+    }
+}
diff --git a/plugins/OStatus/actions/pushhub.php b/plugins/OStatus/actions/pushhub.php
new file mode 100644 (file)
index 0000000..901c18f
--- /dev/null
@@ -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 (file)
index 0000000..b616027
--- /dev/null
@@ -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 (file)
index 0000000..75ba166
--- /dev/null
@@ -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 (file)
index 0000000..7071ee5
--- /dev/null
@@ -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 (file)
index 0000000..733d884
--- /dev/null
@@ -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/OStatus/extlib/README b/plugins/OStatus/extlib/README
new file mode 100644 (file)
index 0000000..799b40c
--- /dev/null
@@ -0,0 +1,9 @@
+XML_Feed_Parser 1.0.3 is not currently actively maintained, and has
+a nasty bug which breaks getting the feed target link from WordPress
+feeds and possibly others that are RSS2-formatted but include an
+<atom:link> self-link element as well.
+
+Patch from this bug report is included:
+http://pear.php.net/bugs/bug.php?id=16416
+
+If upgrading, be sure that fix is included with the future upgrade!
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser.php b/plugins/OStatus/extlib/XML/Feed/Parser.php
new file mode 100755 (executable)
index 0000000..ffe8220
--- /dev/null
@@ -0,0 +1,351 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Key gateway class for XML_Feed_Parser package
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL
+ * @version    CVS: $Id: Parser.php,v 1.24 2006/08/15 13:04:00 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * XML_Feed_Parser_Type is an abstract class required by all of our
+ * feed types. It makes sense to load it here to keep the other files
+ * clean.
+ */
+require_once 'XML/Feed/Parser/Type.php';
+
+/**
+ * We will throw exceptions when errors occur.
+ */
+require_once 'XML/Feed/Parser/Exception.php';
+
+/**
+ * This is the core of the XML_Feed_Parser package. It identifies feed types 
+ * and abstracts access to them. It is an iterator, allowing for easy access 
+ * to the entire feed.
+ *
+ * @author  James Stewart <james@jystewart.net>
+ * @version Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser implements Iterator
+{
+    /**
+     * This is where we hold the feed object 
+     * @var Object
+     */
+    private $feed;
+
+    /**
+     * To allow for extensions, we make a public reference to the feed model 
+     * @var DOMDocument
+     */
+    public $model;
+    
+    /**
+     * A map between entry ID and offset
+     * @var array
+     */
+    protected $idMappings = array();
+
+    /**
+     * A storage space for Namespace URIs.
+     * @var array
+     */
+    private $feedNamespaces = array(
+        'rss2' => array(
+            'http://backend.userland.com/rss',
+            'http://backend.userland.com/rss2',
+            'http://blogs.law.harvard.edu/tech/rss'));
+    /**
+     * Detects feed types and instantiate appropriate objects.
+     *
+     * Our constructor takes care of detecting feed types and instantiating
+     * appropriate classes. For now we're going to treat Atom 0.3 as Atom 1.0
+     * but raise a warning. I do not intend to introduce full support for 
+     * Atom 0.3 as it has been deprecated, but others are welcome to.
+     *
+     * @param    string    $feed    XML serialization of the feed
+     * @param    bool    $strict    Whether or not to validate the feed
+     * @param    bool    $suppressWarnings Trigger errors for deprecated feed types?
+     * @param    bool    $tidy    Whether or not to try and use the tidy library on input
+     */
+    function __construct($feed, $strict = false, $suppressWarnings = false, $tidy = false)
+    {
+        $this->model = new DOMDocument;
+        if (! $this->model->loadXML($feed)) {
+            if (extension_loaded('tidy') && $tidy) {
+                $tidy = new tidy;
+                $tidy->parseString($feed, 
+                    array('input-xml' => true, 'output-xml' => true));
+                $tidy->cleanRepair();
+                if (! $this->model->loadXML((string) $tidy)) {
+                    throw new XML_Feed_Parser_Exception('Invalid input: this is not ' .
+                        'valid XML');
+                }
+            } else {
+                throw new XML_Feed_Parser_Exception('Invalid input: this is not valid XML');
+            }
+
+        }
+
+        /* detect feed type */
+        $doc_element = $this->model->documentElement;
+        $error = false;
+
+        switch (true) {
+            case ($doc_element->namespaceURI == 'http://www.w3.org/2005/Atom'):
+                require_once 'XML/Feed/Parser/Atom.php';
+                require_once 'XML/Feed/Parser/AtomElement.php';
+                $class = 'XML_Feed_Parser_Atom';
+                break;
+            case ($doc_element->namespaceURI == 'http://purl.org/atom/ns#'):
+                require_once 'XML/Feed/Parser/Atom.php';
+                require_once 'XML/Feed/Parser/AtomElement.php';
+                $class = 'XML_Feed_Parser_Atom';
+                $error = 'Atom 0.3 deprecated, using 1.0 parser which won\'t provide ' .
+                    'all options';
+                break;
+            case ($doc_element->namespaceURI == 'http://purl.org/rss/1.0/' || 
+                ($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1 
+                && $doc_element->childNodes->item(1)->namespaceURI == 
+                'http://purl.org/rss/1.0/')):
+                require_once 'XML/Feed/Parser/RSS1.php';
+                require_once 'XML/Feed/Parser/RSS1Element.php';
+                $class = 'XML_Feed_Parser_RSS1';
+                break;
+            case ($doc_element->namespaceURI == 'http://purl.org/rss/1.1/' || 
+                ($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1 
+                && $doc_element->childNodes->item(1)->namespaceURI == 
+                'http://purl.org/rss/1.1/')):
+                require_once 'XML/Feed/Parser/RSS11.php';
+                require_once 'XML/Feed/Parser/RSS11Element.php';
+                $class = 'XML_Feed_Parser_RSS11';
+                break;
+            case (($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1
+                && $doc_element->childNodes->item(1)->namespaceURI == 
+                'http://my.netscape.com/rdf/simple/0.9/') || 
+                $doc_element->namespaceURI == 'http://my.netscape.com/rdf/simple/0.9/'):
+                require_once 'XML/Feed/Parser/RSS09.php';
+                require_once 'XML/Feed/Parser/RSS09Element.php';
+                $class = 'XML_Feed_Parser_RSS09';
+                break;
+            case ($doc_element->tagName == 'rss' and
+                $doc_element->hasAttribute('version') && 
+                $doc_element->getAttribute('version') == 0.91):
+                $error = 'RSS 0.91 has been superceded by RSS2.0. Using RSS2.0 parser.';
+                require_once 'XML/Feed/Parser/RSS2.php';
+                require_once 'XML/Feed/Parser/RSS2Element.php';
+                $class = 'XML_Feed_Parser_RSS2';
+                break;
+            case ($doc_element->tagName == 'rss' and
+                $doc_element->hasAttribute('version') && 
+                $doc_element->getAttribute('version') == 0.92):
+                $error = 'RSS 0.92 has been superceded by RSS2.0. Using RSS2.0 parser.';
+                require_once 'XML/Feed/Parser/RSS2.php';
+                require_once 'XML/Feed/Parser/RSS2Element.php';
+                $class = 'XML_Feed_Parser_RSS2';
+                break;
+            case (in_array($doc_element->namespaceURI, $this->feedNamespaces['rss2'])
+                || $doc_element->tagName == 'rss'):
+                if (! $doc_element->hasAttribute('version') || 
+                    $doc_element->getAttribute('version') != 2) {
+                    $error = 'RSS version not specified. Parsing as RSS2.0';
+                }
+                require_once 'XML/Feed/Parser/RSS2.php';
+                require_once 'XML/Feed/Parser/RSS2Element.php';
+                $class = 'XML_Feed_Parser_RSS2';
+                break;
+            default:
+                throw new XML_Feed_Parser_Exception('Feed type unknown');
+                break;
+        }
+
+        if (! $suppressWarnings && ! empty($error)) {
+            trigger_error($error, E_USER_WARNING);
+        }
+
+        /* Instantiate feed object */
+        $this->feed = new $class($this->model, $strict);
+    }
+
+    /**
+     * Proxy to allow feed element names to be used as method names
+     *
+     * For top-level feed elements we will provide access using methods or 
+     * attributes. This function simply passes on a request to the appropriate 
+     * feed type object.
+     *
+     * @param   string  $call - the method being called
+     * @param   array   $attributes
+     */
+    function __call($call, $attributes)
+    {
+        $attributes = array_pad($attributes, 5, false);
+        list($a, $b, $c, $d, $e) = $attributes;
+        return $this->feed->$call($a, $b, $c, $d, $e);
+    }
+
+    /**
+     * Proxy to allow feed element names to be used as attribute names
+     *
+     * To allow variable-like access to feed-level data we use this
+     * method. It simply passes along to __call() which in turn passes
+     * along to the relevant object.
+     *
+     * @param   string  $val - the name of the variable required
+     */
+    function __get($val)
+    {
+        return $this->feed->$val;
+    }
+
+    /**
+     * Provides iteration functionality.
+     *
+     * Of course we must be able to iterate... This function simply increases
+     * our internal counter.
+     */
+    function next()
+    {
+        if (isset($this->current_item) && 
+            $this->current_item <= $this->feed->numberEntries - 1) {
+            ++$this->current_item;
+        } else if (! isset($this->current_item)) {
+            $this->current_item = 0;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Return XML_Feed_Type object for current element
+     *
+     * @return    XML_Feed_Parser_Type Object
+     */
+    function current()
+    {
+        return $this->getEntryByOffset($this->current_item);
+    }
+
+    /**
+     * For iteration -- returns the key for the current stage in the array.
+     *
+     * @return    int
+     */    
+    function key()
+    {
+        return $this->current_item;
+    }
+
+    /**
+     * For iteration -- tells whether we have reached the 
+     * end.
+     *
+     * @return    bool
+     */
+    function valid()
+    {
+        return $this->current_item < $this->feed->numberEntries;
+    }
+
+    /**
+     * For iteration -- resets the internal counter to the beginning.
+     */
+    function rewind()
+    {
+        $this->current_item = 0;
+    }
+
+    /**
+     * Provides access to entries by ID if one is specified in the source feed.
+     *
+     * As well as allowing the items to be iterated over we want to allow
+     * users to be able to access a specific entry. This is one of two ways of
+     * doing that, the other being by offset. This method can be quite slow
+     * if dealing with a large feed that hasn't yet been processed as it
+     * instantiates objects for every entry until it finds the one needed.
+     *
+     * @param    string    $id  Valid ID for the given feed format
+     * @return    XML_Feed_Parser_Type|false
+     */            
+    function getEntryById($id)
+    {
+        if (isset($this->idMappings[$id])) {
+            return $this->getEntryByOffset($this->idMappings[$id]);
+        }
+
+        /* 
+         * Since we have not yet encountered that ID, let's go through all the
+         * remaining entries in order till we find it.
+         * This is a fairly slow implementation, but it should work.
+         */
+        return $this->feed->getEntryById($id);
+    }
+
+    /**
+     * Retrieve entry by numeric offset, starting from zero.
+     *
+     * As well as allowing the items to be iterated over we want to allow
+     * users to be able to access a specific entry. This is one of two ways of
+     * doing that, the other being by ID.
+     *
+     * @param    int    $offset The position of the entry within the feed, starting from 0
+     * @return    XML_Feed_Parser_Type|false
+     */
+    function getEntryByOffset($offset)
+    {
+        if ($offset < $this->feed->numberEntries) {
+            if (isset($this->feed->entries[$offset])) {
+                return $this->feed->entries[$offset];
+            } else {
+                try {
+                    $this->feed->getEntryByOffset($offset);
+                } catch (Exception $e) {
+                    return false;
+                }
+                $id = $this->feed->entries[$offset]->getID();
+                $this->idMappings[$id] = $offset;
+                return $this->feed->entries[$offset];
+            }
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Retrieve version details from feed type class.
+     *
+     * @return void
+     * @author James Stewart
+     */
+    function version()
+    {
+        return $this->feed->version;
+    }
+    
+    /**
+     * Returns a string representation of the feed.
+     * 
+     * @return String
+     **/
+    function __toString()
+    {
+        return $this->feed->__toString();
+    }
+}
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/Atom.php b/plugins/OStatus/extlib/XML/Feed/Parser/Atom.php
new file mode 100644 (file)
index 0000000..c7e218a
--- /dev/null
@@ -0,0 +1,365 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Atom feed class for XML_Feed_Parser
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: Atom.php,v 1.29 2008/03/30 22:00:36 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+*/
+
+/**
+ * This is the class that determines how we manage Atom 1.0 feeds
+ * 
+ * How we deal with constructs:
+ *  date - return as unix datetime for use with the 'date' function unless specified otherwise
+ *  text - return as is. optional parameter will give access to attributes
+ *  person - defaults to name, but parameter based access
+ *
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser_Atom extends XML_Feed_Parser_Type
+{
+    /**
+     * The URI of the RelaxNG schema used to (optionally) validate the feed 
+     * @var string
+     */
+    private $relax = 'atom.rnc';
+
+    /**
+     * We're likely to use XPath, so let's keep it global 
+     * @var DOMXPath
+     */
+    public $xpath;
+
+    /**
+     * When performing XPath queries we will use this prefix 
+     * @var string
+     */
+    private $xpathPrefix = '//';
+
+    /**
+     * The feed type we are parsing 
+     * @var string
+     */
+    public $version = 'Atom 1.0';
+
+    /** 
+     * The class used to represent individual items 
+     * @var string
+     */
+    protected $itemClass = 'XML_Feed_Parser_AtomElement';
+    
+    /** 
+     * The element containing entries 
+     * @var string
+     */
+    protected $itemElement = 'entry';
+
+    /**
+     * Here we map those elements we're not going to handle individually
+     * to the constructs they are. The optional second parameter in the array
+     * tells the parser whether to 'fall back' (not apt. at the feed level) or
+     * fail if the element is missing. If the parameter is not set, the function
+     * will simply return false and leave it to the client to decide what to do.
+     * @var array
+     */
+    protected $map = array(
+        'author' => array('Person'),
+        'contributor' => array('Person'),
+        'icon' => array('Text'),
+        'logo' => array('Text'),
+        'id' => array('Text', 'fail'),
+        'rights' => array('Text'),
+        'subtitle' => array('Text'),
+        'title' => array('Text', 'fail'),
+        'updated' => array('Date', 'fail'),
+        'link' => array('Link'),
+        'generator' => array('Text'),
+        'category' => array('Category'));
+
+    /**
+     * Here we provide a few mappings for those very special circumstances in
+     * which it makes sense to map back to the RSS2 spec. Key is RSS2 version
+     * value is an array consisting of the equivalent in atom and any attributes
+     * needed to make the mapping.
+     * @var array
+     */
+    protected $compatMap = array(
+        'guid' => array('id'),
+        'links' => array('link'),
+        'tags' => array('category'),
+        'contributors' => array('contributor'));
+
+    /**
+     * Our constructor does nothing more than its parent.
+     * 
+     * @param    DOMDocument    $xml    A DOM object representing the feed
+     * @param    bool (optional) $string    Whether or not to validate this feed
+     */
+    function __construct(DOMDocument $model, $strict = false)
+    {
+        $this->model = $model;
+
+        if ($strict) {
+            if (! $this->model->relaxNGValidateSource($this->relax)) {
+                throw new XML_Feed_Parser_Exception('Failed required validation');
+            }
+        }
+
+        $this->xpath = new DOMXPath($this->model);
+        $this->xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
+        $this->numberEntries = $this->count('entry');
+    }
+
+    /**
+     * Implement retrieval of an entry based on its ID for atom feeds.
+     *
+     * This function uses XPath to get the entry based on its ID. If DOMXPath::evaluate
+     * is available, we also use that to store a reference to the entry in the array
+     * used by getEntryByOffset so that method does not have to seek out the entry
+     * if it's requested that way.
+     * 
+     * @param    string    $id    any valid Atom ID.
+     * @return    XML_Feed_Parser_AtomElement
+     */
+    function getEntryById($id)
+    {
+        if (isset($this->idMappings[$id])) {
+            return $this->entries[$this->idMappings[$id]];
+        }
+
+        $entries = $this->xpath->query("//atom:entry[atom:id='$id']");
+
+        if ($entries->length > 0) {
+            $xmlBase = $entries->item(0)->baseURI;
+            $entry = new $this->itemClass($entries->item(0), $this, $xmlBase);
+            
+            if (in_array('evaluate', get_class_methods($this->xpath))) {
+                $offset = $this->xpath->evaluate("count(preceding-sibling::atom:entry)", $entries->item(0));
+                $this->entries[$offset] = $entry;
+            }
+
+            $this->idMappings[$id] = $entry;
+
+            return $entry;
+        }
+        
+    }
+
+    /**
+     * Retrieves data from a person construct.
+     *
+     * Get a person construct. We default to the 'name' element but allow
+     * access to any of the elements.
+     * 
+     * @param    string    $method    The name of the person construct we want
+     * @param    array     $arguments    An array which we hope gives a 'param'
+     * @return    string|false
+     */
+    protected function getPerson($method, $arguments)
+    {
+        $offset = empty($arguments[0]) ? 0 : $arguments[0];
+        $parameter = empty($arguments[1]['param']) ? 'name' : $arguments[1]['param'];
+        $section = $this->model->getElementsByTagName($method);
+        
+        if ($parameter == 'url') {
+            $parameter = 'uri';
+        }
+
+        if ($section->length <= $offset) {
+            return false;
+        }
+
+        $param = $section->item($offset)->getElementsByTagName($parameter);
+        if ($param->length == 0) {
+            return false;
+        }
+        return $param->item(0)->nodeValue;
+    }
+
+    /**
+     * Retrieves an element's content where that content is a text construct.
+     *
+     * Get a text construct. When calling this method, the two arguments
+     * allowed are 'offset' and 'attribute', so $parser->subtitle() would
+     * return the content of the element, while $parser->subtitle(false, 'type')
+     * would return the value of the type attribute.
+     *
+     * @todo    Clarify overlap with getContent()
+     * @param    string    $method    The name of the text construct we want
+     * @param    array     $arguments    An array which we hope gives a 'param'
+     * @return    string
+     */
+    protected function getText($method, $arguments)
+    {
+        $offset = empty($arguments[0]) ? 0: $arguments[0];
+        $attribute = empty($arguments[1]) ? false : $arguments[1];
+        $tags = $this->model->getElementsByTagName($method);
+
+        if ($tags->length <= $offset) {
+            return false;
+        }
+
+        $content = $tags->item($offset);
+
+        if (! $content->hasAttribute('type')) {
+            $content->setAttribute('type', 'text');
+        }
+        $type = $content->getAttribute('type');
+
+        if (! empty($attribute) and 
+            ! ($method == 'generator' and $attribute == 'name')) {
+            if ($content->hasAttribute($attribute)) {
+                return $content->getAttribute($attribute);
+            } else if ($attribute == 'href' and $content->hasAttribute('uri')) {
+                return $content->getAttribute('uri');
+            }
+            return false;
+        }
+
+        return $this->parseTextConstruct($content);
+    }
+    
+    /**
+     * Extract content appropriately from atom text constructs
+     *
+     * Because of different rules applied to the content element and other text
+     * constructs, they are deployed as separate functions, but they share quite
+     * a bit of processing. This method performs the core common process, which is
+     * to apply the rules for different mime types in order to extract the content.
+     *
+     * @param   DOMNode $content    the text construct node to be parsed
+     * @return String
+     * @author James Stewart
+     **/
+    protected function parseTextConstruct(DOMNode $content)
+    {
+        if ($content->hasAttribute('type')) {
+            $type = $content->getAttribute('type');
+        } else {
+            $type = 'text';
+        }
+
+        if (strpos($type, 'text/') === 0) {
+            $type = 'text';
+        }
+
+        switch ($type) {
+            case 'text':
+            case 'html':
+                return $content->textContent;
+                break;
+            case 'xhtml':
+                $container = $content->getElementsByTagName('div');
+                if ($container->length == 0) {
+                    return false;
+                }
+                $contents = $container->item(0);
+                if ($contents->hasChildNodes()) {
+                    /* Iterate through, applying xml:base and store the result */
+                    $result = '';
+                    foreach ($contents->childNodes as $node) {
+                        $result .= $this->traverseNode($node);
+                    }
+                    return $result;
+                }
+                break;
+            case preg_match('@^[a-zA-Z]+/[a-zA-Z+]*xml@i', $type) > 0:
+                return $content;
+                break;
+            case 'application/octet-stream':
+            default:
+                return base64_decode(trim($content->nodeValue));
+                break;
+        }
+        return false;
+    }
+    /**
+     * Get a category from the entry.
+     *
+     * A feed or entry can have any number of categories. A category can have the
+     * attributes term, scheme and label.
+     * 
+     * @param    string    $method    The name of the text construct we want
+     * @param    array     $arguments    An array which we hope gives a 'param'
+     * @return    string
+     */
+    function getCategory($method, $arguments)
+    {
+        $offset = empty($arguments[0]) ? 0: $arguments[0];
+        $attribute = empty($arguments[1]) ? 'term' : $arguments[1];
+        $categories = $this->model->getElementsByTagName('category');
+        if ($categories->length <= $offset) {
+            $category = $categories->item($offset);
+            if ($category->hasAttribute($attribute)) {
+                return $category->getAttribute($attribute);
+            }
+        }
+        return false;
+    }
+
+    /**
+     * This element must be present at least once with rel="feed". This element may be 
+     * present any number of further times so long as there is no clash. If no 'rel' is 
+     * present and we're asked for one, we follow the example of the Universal Feed
+     * Parser and presume 'alternate'.
+     *
+     * @param    int    $offset    the position of the link within the container
+     * @param    string    $attribute    the attribute name required
+     * @param    array     an array of attributes to search by
+     * @return    string    the value of the attribute
+     */
+    function getLink($offset = 0, $attribute = 'href', $params = false)
+    {
+        if (is_array($params) and !empty($params)) {
+            $terms = array();
+            $alt_predicate = '';
+            $other_predicate = '';
+
+            foreach ($params as $key => $value) {
+                if ($key == 'rel' && $value == 'alternate') {
+                    $alt_predicate = '[not(@rel) or @rel="alternate"]';
+                } else {
+                    $terms[] = "@$key='$value'";
+                }
+            }
+            if (!empty($terms)) {
+                $other_predicate = '[' . join(' and ', $terms) . ']';
+            }
+            $query =  $this->xpathPrefix . 'atom:link' . $alt_predicate . $other_predicate;
+            $links = $this->xpath->query($query);
+        } else {
+            $links = $this->model->getElementsByTagName('link');
+        }
+        if ($links->length > $offset) {
+            if ($links->item($offset)->hasAttribute($attribute)) {
+                $value = $links->item($offset)->getAttribute($attribute);
+                if ($attribute == 'href') {
+                    $value = $this->addBase($value, $links->item($offset));
+                }
+                return $value;
+            } else if ($attribute == 'rel') {
+                return 'alternate';
+            }
+        }
+        return false;
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php b/plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php
new file mode 100755 (executable)
index 0000000..063ecb6
--- /dev/null
@@ -0,0 +1,261 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * AtomElement class for XML_Feed_Parser package
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: AtomElement.php,v 1.19 2007/03/26 12:43:11 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * This class provides support for atom entries. It will usually be called by
+ * XML_Feed_Parser_Atom with which it shares many methods.
+ *
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser_AtomElement extends XML_Feed_Parser_Atom
+{
+    /**
+     * This will be a reference to the parent object for when we want
+     * to use a 'fallback' rule 
+     * @var XML_Feed_Parser_Atom
+     */
+    protected $parent;
+
+    /**
+     * When performing XPath queries we will use this prefix 
+     * @var string
+     */
+    private $xpathPrefix = '';
+    
+    /**
+     * xml:base values inherited by the element 
+     * @var string
+     */
+    protected $xmlBase;
+
+    /**
+     * Here we provide a few mappings for those very special circumstances in
+     * which it makes sense to map back to the RSS2 spec or to manage other
+     * compatibilities (eg. with the Univeral Feed Parser). Key is the other version's
+     * name for the command, value is an array consisting of the equivalent in our atom 
+     * api and any attributes needed to make the mapping.
+     * @var array
+     */
+    protected $compatMap = array(
+        'guid' => array('id'),
+        'links' => array('link'),
+        'tags' => array('category'),
+        'contributors' => array('contributor'));
+        
+    /**
+     * Our specific element map 
+     * @var array
+     */
+    protected $map = array(
+        'author' => array('Person', 'fallback'),
+        'contributor' => array('Person'),
+        'id' => array('Text', 'fail'),
+        'published' => array('Date'),
+        'updated' => array('Date', 'fail'),
+        'title' => array('Text', 'fail'),
+        'rights' => array('Text', 'fallback'),
+        'summary' => array('Text'),
+        'content' => array('Content'),
+        'link' => array('Link'),
+        'enclosure' => array('Enclosure'),
+        'category' => array('Category'));
+
+    /**
+     * Store useful information for later.
+     *
+     * @param   DOMElement  $element - this item as a DOM element
+     * @param   XML_Feed_Parser_Atom    $parent - the feed of which this is a member
+     */
+    function __construct(DOMElement $element, $parent, $xmlBase = '')
+    {
+        $this->model = $element;
+        $this->parent = $parent;
+        $this->xmlBase = $xmlBase;
+        $this->xpathPrefix = "//atom:entry[atom:id='" . $this->id . "']/";
+        $this->xpath = $this->parent->xpath;
+    }
+
+    /**
+     * Provides access to specific aspects of the author data for an atom entry
+     *
+     * Author data at the entry level is more complex than at the feed level.
+     * If atom:author is not present for the entry we need to look for it in
+     * an atom:source child of the atom:entry. If it's not there either, then
+     * we look to the parent for data.
+     *
+     * @param   array
+     * @return  string
+     */
+    function getAuthor($arguments)
+    {
+        /* Find out which part of the author data we're looking for */
+        if (isset($arguments['param'])) {
+            $parameter = $arguments['param'];
+        } else {
+            $parameter = 'name';
+        }
+        
+        $test = $this->model->getElementsByTagName('author');
+        if ($test->length > 0) {
+            $item = $test->item(0);
+            return $item->getElementsByTagName($parameter)->item(0)->nodeValue;
+        }
+        
+        $source = $this->model->getElementsByTagName('source');
+        if ($source->length > 0) {
+            $test = $this->model->getElementsByTagName('author');
+            if ($test->length > 0) {
+                $item = $test->item(0);
+                return $item->getElementsByTagName($parameter)->item(0)->nodeValue;
+            }
+        }
+        return $this->parent->getAuthor($arguments);
+    }
+
+    /**
+     * Returns the content of the content element or info on a specific attribute
+     *
+     * This element may or may not be present. It cannot be present more than
+     * once. It may have a 'src' attribute, in which case there's no content
+     * If not present, then the entry must have link with rel="alternate".
+     * If there is content we return it, if not and there's a 'src' attribute
+     * we return the value of that instead. The method can take an 'attribute'
+     * argument, in which case we return the value of that attribute if present.
+     * eg. $item->content("type") will return the type of the content. It is
+     * recommended that all users check the type before getting the content to
+     * ensure that their script is capable of handling the type of returned data.
+     * (data carried in the content element can be either 'text', 'html', 'xhtml', 
+     * or any standard MIME type).
+     *
+     * @return  string|false
+     */
+    protected function getContent($method, $arguments = array())
+    {
+        $attribute = empty($arguments[0]) ? false : $arguments[0];
+        $tags = $this->model->getElementsByTagName('content');
+
+        if ($tags->length == 0) {
+            return false;
+        }
+
+        $content = $tags->item(0);
+
+        if (! $content->hasAttribute('type')) {
+            $content->setAttribute('type', 'text');
+        }
+        if (! empty($attribute)) {
+            return $content->getAttribute($attribute);
+        }
+
+        $type = $content->getAttribute('type');
+
+        if (! empty($attribute)) {
+            if ($content->hasAttribute($attribute))
+            {
+                return $content->getAttribute($attribute);
+            }
+            return false;
+        }
+
+        if ($content->hasAttribute('src')) {
+            return $content->getAttribute('src');
+        }
+
+        return $this->parseTextConstruct($content);
+     }
+
+    /**
+     * For compatibility, this method provides a mapping to access enclosures.
+     *
+     * The Atom spec doesn't provide for an enclosure element, but it is
+     * generally supported using the link element with rel='enclosure'.
+     *
+     * @param   string  $method - for compatibility with our __call usage
+     * @param   array   $arguments - for compatibility with our __call usage
+     * @return  array|false
+     */
+    function getEnclosure($method, $arguments = array())
+    {
+        $offset = isset($arguments[0]) ? $arguments[0] : 0;
+        $query = "//atom:entry[atom:id='" . $this->getText('id', false) . 
+            "']/atom:link[@rel='enclosure']";
+
+        $encs = $this->parent->xpath->query($query);
+        if ($encs->length > $offset) {
+            try {
+                if (! $encs->item($offset)->hasAttribute('href')) {
+                    return false;
+                }
+                $attrs = $encs->item($offset)->attributes;
+                $length = $encs->item($offset)->hasAttribute('length') ? 
+                    $encs->item($offset)->getAttribute('length') : false;
+                return array(
+                    'url' => $attrs->getNamedItem('href')->value,
+                    'type' => $attrs->getNamedItem('type')->value,
+                    'length' => $length);
+            } catch (Exception $e) {
+                return false;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Get details of this entry's source, if available/relevant
+     *
+     * Where an atom:entry is taken from another feed then the aggregator
+     * is supposed to include an atom:source element which replicates at least
+     * the atom:id, atom:title, and atom:updated metadata from the original
+     * feed. Atom:source therefore has a very similar structure to atom:feed
+     * and if we find it we will return it as an XML_Feed_Parser_Atom object.
+     *
+     * @return  XML_Feed_Parser_Atom|false
+     */
+    function getSource()
+    {
+        $test = $this->model->getElementsByTagName('source');
+        if ($test->length == 0) {
+            return false;
+        }
+        $source = new XML_Feed_Parser_Atom($test->item(0));
+    }
+
+    /**
+     * Get the entry as an XML string
+     *
+     * Return an XML serialization of the feed, should it be required. Most 
+     * users however, will already have a serialization that they used when 
+     * instantiating the object.
+     *
+     * @return    string    XML serialization of element
+     */    
+    function __toString()
+    {
+        $simple = simplexml_import_dom($this->model);
+        return $simple->asXML();
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/Exception.php b/plugins/OStatus/extlib/XML/Feed/Parser/Exception.php
new file mode 100755 (executable)
index 0000000..1e76e3f
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Keeps the exception class for XML_Feed_Parser.
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL
+ * @version    CVS: $Id: Exception.php,v 1.3 2005/11/07 01:52:35 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+/**
+ * We are extending PEAR_Exception
+ */
+require_once 'PEAR/Exception.php';
+
+/**
+ * XML_Feed_Parser_Exception is a simple extension of PEAR_Exception, existing
+ * to help with identification of the source of exceptions.
+ *
+ * @author  James Stewart <james@jystewart.net>
+ * @version Release: 1.0.3
+ * @package XML_Feed_Parser
+ */ 
+class XML_Feed_Parser_Exception extends PEAR_Exception
+{
+
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php
new file mode 100755 (executable)
index 0000000..07f38f9
--- /dev/null
@@ -0,0 +1,214 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * RSS0.9 class for XML_Feed_Parser
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS09.php,v 1.5 2006/07/26 21:18:46 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * This class handles RSS0.9 feeds.
+ * 
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ * @todo    Find a Relax NG URI we can use
+ */
+class XML_Feed_Parser_RSS09 extends XML_Feed_Parser_Type
+{
+    /**
+     * The URI of the RelaxNG schema used to (optionally) validate the feed 
+     * @var string
+     */
+    private $relax = '';
+
+    /**
+     * We're likely to use XPath, so let's keep it global
+     * @var DOMXPath
+     */
+    protected $xpath;
+
+    /**
+     * The feed type we are parsing 
+     * @var string
+     */
+    public $version = 'RSS 0.9';
+
+    /**
+     * The class used to represent individual items 
+     * @var string
+     */
+    protected $itemClass = 'XML_Feed_Parser_RSS09Element';
+    
+    /**
+     * The element containing entries 
+     * @var string
+     */
+    protected $itemElement = 'item';
+
+    /**
+     * Here we map those elements we're not going to handle individually
+     * to the constructs they are. The optional second parameter in the array
+     * tells the parser whether to 'fall back' (not apt. at the feed level) or
+     * fail if the element is missing. If the parameter is not set, the function
+     * will simply return false and leave it to the client to decide what to do.
+     * @var array
+     */
+    protected $map = array(
+        'title' => array('Text'),
+        'link' => array('Text'),
+        'description' => array('Text'),
+        'image' => array('Image'),
+        'textinput' => array('TextInput'));
+
+    /**
+     * Here we map some elements to their atom equivalents. This is going to be
+     * quite tricky to pull off effectively (and some users' methods may vary)
+     * but is worth trying. The key is the atom version, the value is RSS2.
+     * @var array
+     */
+    protected $compatMap = array(
+        'title' => array('title'),
+        'link' => array('link'),
+        'subtitle' => array('description'));
+
+    /**
+     * We will be working with multiple namespaces and it is useful to 
+     * keep them together 
+     * @var array
+     */
+    protected $namespaces = array(
+        'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
+
+    /**
+     * Our constructor does nothing more than its parent.
+     * 
+     * @todo    RelaxNG validation
+     * @param    DOMDocument    $xml    A DOM object representing the feed
+     * @param    bool (optional) $string    Whether or not to validate this feed
+     */
+    function __construct(DOMDocument $model, $strict = false)
+    {
+        $this->model = $model;
+
+        $this->xpath = new DOMXPath($model);
+        foreach ($this->namespaces as $key => $value) {
+            $this->xpath->registerNamespace($key, $value);
+        }            
+        $this->numberEntries = $this->count('item');
+    }
+
+    /**
+     * Included for compatibility -- will not work with RSS 0.9
+     *
+     * This is not something that will work with RSS0.9 as it does not have
+     * clear restrictions on the global uniqueness of IDs.
+     *
+     * @param    string    $id    any valid ID.
+     * @return    false
+     */
+    function getEntryById($id)
+    {
+        return false;        
+    }
+
+    /**
+     * Get details of the image associated with the feed.
+     *
+     * @return  array|false an array simply containing the child elements
+     */
+    protected function getImage()
+    {
+        $images = $this->model->getElementsByTagName('image');
+        if ($images->length > 0) {
+            $image = $images->item(0);
+            $details = array();
+            if ($image->hasChildNodes()) {
+                $details = array(
+                    'title' => $image->getElementsByTagName('title')->item(0)->value,
+                    'link' => $image->getElementsByTagName('link')->item(0)->value,
+                    'url' => $image->getElementsByTagName('url')->item(0)->value);
+            } else {
+                $details = array('title' => false,
+                    'link' => false,
+                    'url' => $image->attributes->getNamedItem('resource')->nodeValue);
+            }
+            $details = array_merge($details, 
+                array('description' => false, 'height' => false, 'width' => false));
+            if (! empty($details)) {
+                return $details;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * The textinput element is little used, but in the interests of
+     * completeness we will support it.
+     *
+     * @return  array|false
+     */
+    protected function getTextInput()
+    {
+        $inputs = $this->model->getElementsByTagName('textinput');
+        if ($inputs->length > 0) {
+            $input = $inputs->item(0);
+            $results = array();
+            $results['title'] = isset(
+                $input->getElementsByTagName('title')->item(0)->value) ? 
+                $input->getElementsByTagName('title')->item(0)->value : null;
+            $results['description'] = isset(
+                $input->getElementsByTagName('description')->item(0)->value) ? 
+                $input->getElementsByTagName('description')->item(0)->value : null;
+            $results['name'] = isset(
+                $input->getElementsByTagName('name')->item(0)->value) ? 
+                $input->getElementsByTagName('name')->item(0)->value : null;
+            $results['link'] = isset(
+                   $input->getElementsByTagName('link')->item(0)->value) ? 
+                   $input->getElementsByTagName('link')->item(0)->value : null;
+            if (empty($results['link']) && 
+                $input->attributes->getNamedItem('resource')) {
+                $results['link'] = $input->attributes->getNamedItem('resource')->nodeValue;
+            }
+            if (! empty($results)) {
+                return $results;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Get details of a link from the feed.
+     *
+     * In RSS1 a link is a text element but in order to ensure that we resolve
+     * URLs properly we have a special function for them.
+     *
+     * @return  string
+     */
+    function getLink($offset = 0, $attribute = 'href', $params = false)
+    {
+        $links = $this->model->getElementsByTagName('link');
+        if ($links->length <= $offset) {
+            return false;
+        }
+        $link = $links->item($offset);
+        return $this->addBase($link->nodeValue, $link);
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php
new file mode 100755 (executable)
index 0000000..d41f36e
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * RSS0.9 Element class for XML_Feed_Parser
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS09Element.php,v 1.4 2006/06/30 17:41:56 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/*
+ * This class provides support for RSS 0.9 entries. It will usually be called by
+ * XML_Feed_Parser_RSS09 with which it shares many methods.
+ *
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser_RSS09Element extends XML_Feed_Parser_RSS09
+{
+    /**
+     * This will be a reference to the parent object for when we want
+     * to use a 'fallback' rule 
+     * @var XML_Feed_Parser_RSS09
+     */
+    protected $parent;
+
+    /**
+     * Our specific element map 
+     * @var array
+     */
+    protected $map = array(
+        'title' => array('Text'),
+        'link' => array('Link'));
+
+    /**
+     * Store useful information for later.
+     *
+     * @param   DOMElement  $element - this item as a DOM element
+     * @param   XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
+     */
+    function __construct(DOMElement $element, $parent, $xmlBase = '')
+    {
+        $this->model = $element;
+        $this->parent = $parent;
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php
new file mode 100755 (executable)
index 0000000..60c9938
--- /dev/null
@@ -0,0 +1,277 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * RSS1 class for XML_Feed_Parser
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS1.php,v 1.10 2006/07/27 13:52:05 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * This class handles RSS1.0 feeds.
+ * 
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ * @todo    Find a Relax NG URI we can use
+ */
+class XML_Feed_Parser_RSS1 extends XML_Feed_Parser_Type
+{
+    /**
+     * The URI of the RelaxNG schema used to (optionally) validate the feed 
+     * @var string
+     */
+    private $relax = 'rss10.rnc';
+
+    /**
+     * We're likely to use XPath, so let's keep it global
+     * @var DOMXPath
+     */
+    protected $xpath;
+
+    /**
+     * The feed type we are parsing 
+     * @var string
+     */
+    public $version = 'RSS 1.0';
+
+    /**
+     * The class used to represent individual items 
+     * @var string
+     */
+    protected $itemClass = 'XML_Feed_Parser_RSS1Element';
+    
+    /**
+     * The element containing entries 
+     * @var string
+     */
+    protected $itemElement = 'item';
+
+    /**
+     * Here we map those elements we're not going to handle individually
+     * to the constructs they are. The optional second parameter in the array
+     * tells the parser whether to 'fall back' (not apt. at the feed level) or
+     * fail if the element is missing. If the parameter is not set, the function
+     * will simply return false and leave it to the client to decide what to do.
+     * @var array
+     */
+    protected $map = array(
+        'title' => array('Text'),
+        'link' => array('Text'),
+        'description' => array('Text'),
+        'image' => array('Image'),
+        'textinput' => array('TextInput'),
+        'updatePeriod' => array('Text'),
+        'updateFrequency' => array('Text'),
+        'updateBase' => array('Date'),
+        'rights' => array('Text'), # dc:rights
+        'description' => array('Text'), # dc:description
+        'creator' => array('Text'), # dc:creator
+        'publisher' => array('Text'), # dc:publisher
+        'contributor' => array('Text'), # dc:contributor
+        'date' => array('Date') # dc:contributor
+        );
+
+    /**
+     * Here we map some elements to their atom equivalents. This is going to be
+     * quite tricky to pull off effectively (and some users' methods may vary)
+     * but is worth trying. The key is the atom version, the value is RSS2.
+     * @var array
+     */
+    protected $compatMap = array(
+        'title' => array('title'),
+        'link' => array('link'),
+        'subtitle' => array('description'),
+        'author' => array('creator'),
+        'updated' => array('date'));
+
+    /**
+     * We will be working with multiple namespaces and it is useful to 
+     * keep them together 
+     * @var array
+     */
+    protected $namespaces = array(
+        'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
+        'rss' => 'http://purl.org/rss/1.0/',
+        'dc' => 'http://purl.org/rss/1.0/modules/dc/',
+        'content' => 'http://purl.org/rss/1.0/modules/content/',
+        'sy' => 'http://web.resource.org/rss/1.0/modules/syndication/');
+
+    /**
+     * Our constructor does nothing more than its parent.
+     * 
+     * @param    DOMDocument    $xml    A DOM object representing the feed
+     * @param    bool (optional) $string    Whether or not to validate this feed
+     */
+    function __construct(DOMDocument $model, $strict = false)
+    {
+        $this->model = $model;
+        if ($strict) {
+            $validate = $this->model->relaxNGValidate(self::getSchemaDir . 
+                DIRECTORY_SEPARATOR . $this->relax);
+            if (! $validate) {
+                throw new XML_Feed_Parser_Exception('Failed required validation');
+            }
+        }
+
+        $this->xpath = new DOMXPath($model);
+        foreach ($this->namespaces as $key => $value) {
+            $this->xpath->registerNamespace($key, $value);
+        }
+        $this->numberEntries = $this->count('item');
+    }
+
+    /**
+     * Allows retrieval of an entry by ID where the rdf:about attribute is used
+     *
+     * This is not really something that will work with RSS1 as it does not have
+     * clear restrictions on the global uniqueness of IDs. We will employ the
+     * _very_ hit and miss method of selecting entries based on the rdf:about
+     * attribute. If DOMXPath::evaluate is available, we also use that to store 
+     * a reference to the entry in the array used by getEntryByOffset so that 
+     * method does not have to seek out the entry if it's requested that way.
+     *
+     * @param    string    $id    any valid ID.
+     * @return    XML_Feed_Parser_RSS1Element
+     */
+    function getEntryById($id)
+    {
+        if (isset($this->idMappings[$id])) {
+            return $this->entries[$this->idMappings[$id]];
+        }
+
+        $entries = $this->xpath->query("//rss:item[@rdf:about='$id']");
+        if ($entries->length > 0) {
+            $classname = $this->itemClass;
+            $entry = new $classname($entries->item(0), $this);
+            if (in_array('evaluate', get_class_methods($this->xpath))) {
+                $offset = $this->xpath->evaluate("count(preceding-sibling::rss:item)", $entries->item(0));
+                $this->entries[$offset] = $entry;
+            }
+            $this->idMappings[$id] = $entry;
+            return $entry;
+        }
+        return false;
+    }
+
+    /**
+     * Get details of the image associated with the feed.
+     *
+     * @return  array|false an array simply containing the child elements
+     */
+    protected function getImage()
+    {
+        $images = $this->model->getElementsByTagName('image');
+        if ($images->length > 0) {
+            $image = $images->item(0);
+            $details = array();
+            if ($image->hasChildNodes()) {
+                $details = array(
+                    'title' => $image->getElementsByTagName('title')->item(0)->value,
+                    'link' => $image->getElementsByTagName('link')->item(0)->value,
+                    'url' => $image->getElementsByTagName('url')->item(0)->value);
+            } else {
+                $details = array('title' => false,
+                    'link' => false,
+                    'url' => $image->attributes->getNamedItem('resource')->nodeValue);
+            }
+            $details = array_merge($details, array('description' => false, 'height' => false, 'width' => false));
+            if (! empty($details)) {
+                return $details;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * The textinput element is little used, but in the interests of
+     * completeness we will support it.
+     *
+     * @return  array|false
+     */
+    protected function getTextInput()
+    {
+        $inputs = $this->model->getElementsByTagName('textinput');
+        if ($inputs->length > 0) {
+            $input = $inputs->item(0);
+            $results = array();
+            $results['title'] = isset(
+                $input->getElementsByTagName('title')->item(0)->value) ? 
+                $input->getElementsByTagName('title')->item(0)->value : null;
+            $results['description'] = isset(
+                $input->getElementsByTagName('description')->item(0)->value) ? 
+                $input->getElementsByTagName('description')->item(0)->value : null;
+            $results['name'] = isset(
+                $input->getElementsByTagName('name')->item(0)->value) ? 
+                $input->getElementsByTagName('name')->item(0)->value : null;
+            $results['link'] = isset(
+                   $input->getElementsByTagName('link')->item(0)->value) ? 
+                   $input->getElementsByTagName('link')->item(0)->value : null;
+            if (empty($results['link']) and 
+                $input->attributes->getNamedItem('resource')) {
+                $results['link'] = 
+                    $input->attributes->getNamedItem('resource')->nodeValue;
+            }
+            if (! empty($results)) {
+                return $results;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Employs various techniques to identify the author
+     *
+     * Dublin Core provides the dc:creator, dc:contributor, and dc:publisher
+     * elements for defining authorship in RSS1. We will try each of those in
+     * turn in order to simulate the atom author element and will return it
+     * as text.
+     *
+     * @return  array|false
+     */
+    function getAuthor()
+    {
+        $options = array('creator', 'contributor', 'publisher');
+        foreach ($options as $element) {
+            $test = $this->model->getElementsByTagName($element);
+            if ($test->length > 0) {
+                return $test->item(0)->value;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Retrieve a link
+     * 
+     * In RSS1 a link is a text element but in order to ensure that we resolve
+     * URLs properly we have a special function for them.
+     *
+     * @return  string
+     */
+    function getLink($offset = 0, $attribute = 'href', $params = false)
+    {
+        $links = $this->model->getElementsByTagName('link');
+        if ($links->length <= $offset) {
+            return false;
+        }
+        $link = $links->item($offset);
+        return $this->addBase($link->nodeValue, $link);
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php
new file mode 100755 (executable)
index 0000000..3cd1ef1
--- /dev/null
@@ -0,0 +1,276 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * RSS1.1 class for XML_Feed_Parser
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS11.php,v 1.6 2006/07/27 13:52:05 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * This class handles RSS1.1 feeds. RSS1.1 is documented at:
+ * http://inamidst.com/rss1.1/
+ * 
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ * @todo    Support for RDF:List
+ * @todo    Ensure xml:lang is accessible to users
+ */
+class XML_Feed_Parser_RSS11 extends XML_Feed_Parser_Type
+{
+    /**
+     * The URI of the RelaxNG schema used to (optionally) validate the feed 
+     * @var string
+     */
+    private $relax = 'rss11.rnc';
+
+    /**
+     * We're likely to use XPath, so let's keep it global
+     * @var DOMXPath
+     */
+    protected $xpath;
+
+    /**
+     * The feed type we are parsing 
+     * @var string
+     */
+    public $version = 'RSS 1.0';
+
+    /**
+     * The class used to represent individual items 
+     * @var string
+     */
+    protected $itemClass = 'XML_Feed_Parser_RSS1Element';
+    
+    /**
+     * The element containing entries 
+     * @var string
+     */
+    protected $itemElement = 'item';
+
+    /**
+     * Here we map those elements we're not going to handle individually
+     * to the constructs they are. The optional second parameter in the array
+     * tells the parser whether to 'fall back' (not apt. at the feed level) or
+     * fail if the element is missing. If the parameter is not set, the function
+     * will simply return false and leave it to the client to decide what to do.
+     * @var array
+     */
+    protected $map = array(
+        'title' => array('Text'),
+        'link' => array('Text'),
+        'description' => array('Text'),
+        'image' => array('Image'),
+        'updatePeriod' => array('Text'),
+        'updateFrequency' => array('Text'),
+        'updateBase' => array('Date'),
+        'rights' => array('Text'), # dc:rights
+        'description' => array('Text'), # dc:description
+        'creator' => array('Text'), # dc:creator
+        'publisher' => array('Text'), # dc:publisher
+        'contributor' => array('Text'), # dc:contributor
+        'date' => array('Date') # dc:contributor
+        );
+
+    /**
+     * Here we map some elements to their atom equivalents. This is going to be
+     * quite tricky to pull off effectively (and some users' methods may vary)
+     * but is worth trying. The key is the atom version, the value is RSS2.
+     * @var array
+     */
+    protected $compatMap = array(
+        'title' => array('title'),
+        'link' => array('link'),
+        'subtitle' => array('description'),
+        'author' => array('creator'),
+        'updated' => array('date'));
+
+    /**
+     * We will be working with multiple namespaces and it is useful to 
+     * keep them together. We will retain support for some common RSS1.0 modules
+     * @var array
+     */
+    protected $namespaces = array(
+        'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
+        'rss' => 'http://purl.org/net/rss1.1#',
+        'dc' => 'http://purl.org/rss/1.0/modules/dc/',
+        'content' => 'http://purl.org/rss/1.0/modules/content/',
+        'sy' => 'http://web.resource.org/rss/1.0/modules/syndication/');
+
+    /**
+     * Our constructor does nothing more than its parent.
+     * 
+     * @param    DOMDocument    $xml    A DOM object representing the feed
+     * @param    bool (optional) $string    Whether or not to validate this feed
+     */
+    function __construct(DOMDocument $model, $strict = false)
+    {
+        $this->model = $model;
+
+        if ($strict) {
+            $validate = $this->model->relaxNGValidate(self::getSchemaDir . 
+                DIRECTORY_SEPARATOR . $this->relax);
+            if (! $validate) {
+                throw new XML_Feed_Parser_Exception('Failed required validation');
+            }
+        }
+
+        $this->xpath = new DOMXPath($model);
+        foreach ($this->namespaces as $key => $value) {
+            $this->xpath->registerNamespace($key, $value);
+        }            
+        $this->numberEntries = $this->count('item');
+    }
+
+    /**
+     * Attempts to identify an element by ID given by the rdf:about attribute
+     *
+     * This is not really something that will work with RSS1.1 as it does not have
+     * clear restrictions on the global uniqueness of IDs. We will employ the
+     * _very_ hit and miss method of selecting entries based on the rdf:about
+     * attribute. Please note that this is even more hit and miss with RSS1.1 than
+     * with RSS1.0 since RSS1.1 does not require the rdf:about attribute for items.
+     *
+     * @param    string    $id    any valid ID.
+     * @return    XML_Feed_Parser_RSS1Element
+     */
+    function getEntryById($id)
+    {
+        if (isset($this->idMappings[$id])) {
+            return $this->entries[$this->idMappings[$id]];
+        }
+
+        $entries = $this->xpath->query("//rss:item[@rdf:about='$id']");
+        if ($entries->length > 0) {
+            $classname = $this->itemClass;
+            $entry = new $classname($entries->item(0), $this);
+            return $entry;
+        }
+        return false;
+    }
+
+    /**
+     * Get details of the image associated with the feed.
+     *
+     * @return  array|false an array simply containing the child elements
+     */
+    protected function getImage()
+    {
+        $images = $this->model->getElementsByTagName('image');
+        if ($images->length > 0) {
+            $image = $images->item(0);
+            $details = array();
+            if ($image->hasChildNodes()) {
+                $details = array(
+                    'title' => $image->getElementsByTagName('title')->item(0)->value,
+                    'url' => $image->getElementsByTagName('url')->item(0)->value);
+                if ($image->getElementsByTagName('link')->length > 0) {
+                    $details['link'] = 
+                        $image->getElementsByTagName('link')->item(0)->value;
+                }
+            } else {
+                $details = array('title' => false,
+                    'link' => false,
+                    'url' => $image->attributes->getNamedItem('resource')->nodeValue);
+            }
+            $details = array_merge($details, 
+                array('description' => false, 'height' => false, 'width' => false));
+            if (! empty($details)) {
+                return $details;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * The textinput element is little used, but in the interests of
+     * completeness we will support it.
+     *
+     * @return  array|false
+     */
+    protected function getTextInput()
+    {
+        $inputs = $this->model->getElementsByTagName('textinput');
+        if ($inputs->length > 0) {
+            $input = $inputs->item(0);
+            $results = array();
+            $results['title'] = isset(
+                $input->getElementsByTagName('title')->item(0)->value) ? 
+                $input->getElementsByTagName('title')->item(0)->value : null;
+            $results['description'] = isset(
+                $input->getElementsByTagName('description')->item(0)->value) ? 
+                $input->getElementsByTagName('description')->item(0)->value : null;
+            $results['name'] = isset(
+                $input->getElementsByTagName('name')->item(0)->value) ? 
+                $input->getElementsByTagName('name')->item(0)->value : null;
+            $results['link'] = isset(
+                   $input->getElementsByTagName('link')->item(0)->value) ? 
+                   $input->getElementsByTagName('link')->item(0)->value : null;
+            if (empty($results['link']) and 
+                $input->attributes->getNamedItem('resource')) {
+                $results['link'] = $input->attributes->getNamedItem('resource')->nodeValue;
+            }
+            if (! empty($results)) {
+                return $results;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Attempts to discern authorship
+     *
+     * Dublin Core provides the dc:creator, dc:contributor, and dc:publisher
+     * elements for defining authorship in RSS1. We will try each of those in
+     * turn in order to simulate the atom author element and will return it
+     * as text.
+     *
+     * @return  array|false
+     */
+    function getAuthor()
+    {
+        $options = array('creator', 'contributor', 'publisher');
+        foreach ($options as $element) {
+            $test = $this->model->getElementsByTagName($element);
+            if ($test->length > 0) {
+                return $test->item(0)->value;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Retrieve a link
+     *
+     * In RSS1 a link is a text element but in order to ensure that we resolve
+     * URLs properly we have a special function for them.
+     *
+     * @return  string
+     */
+    function getLink($offset = 0, $attribute = 'href', $params = false)
+    {
+        $links = $this->model->getElementsByTagName('link');
+        if ($links->length <= $offset) {
+            return false;
+        }
+        $link = $links->item($offset);
+        return $this->addBase($link->nodeValue, $link);
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php
new file mode 100755 (executable)
index 0000000..75918be
--- /dev/null
@@ -0,0 +1,151 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * RSS1 Element class for XML_Feed_Parser
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS11Element.php,v 1.4 2006/06/30 17:41:56 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/*
+ * This class provides support for RSS 1.1 entries. It will usually be called by
+ * XML_Feed_Parser_RSS11 with which it shares many methods.
+ *
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser_RSS11Element extends XML_Feed_Parser_RSS11
+{
+    /**
+     * This will be a reference to the parent object for when we want
+     * to use a 'fallback' rule 
+     * @var XML_Feed_Parser_RSS1
+     */
+    protected $parent;
+
+    /**
+     * Our specific element map 
+     * @var array
+     */
+    protected $map = array(
+        'id' => array('Id'),
+        'title' => array('Text'),
+        'link' => array('Link'),
+        'description' => array('Text'), # or dc:description
+        'category' => array('Category'),
+        'rights' => array('Text'), # dc:rights
+        'creator' => array('Text'), # dc:creator
+        'publisher' => array('Text'), # dc:publisher
+        'contributor' => array('Text'), # dc:contributor
+        'date' => array('Date'), # dc:date
+        'content' => array('Content')
+        );
+
+    /**
+     * Here we map some elements to their atom equivalents. This is going to be
+     * quite tricky to pull off effectively (and some users' methods may vary)
+     * but is worth trying. The key is the atom version, the value is RSS1.
+     * @var array
+     */
+    protected $compatMap = array(
+        'content' => array('content'),
+        'updated' => array('lastBuildDate'),
+        'published' => array('pubdate'),
+        'subtitle' => array('description'),
+        'updated' => array('date'),
+        'author' => array('creator'),
+        'contributor' => array('contributor')
+    );
+
+    /**
+     * Store useful information for later.
+     *
+     * @param   DOMElement  $element - this item as a DOM element
+     * @param   XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
+     */
+    function __construct(DOMElement $element, $parent, $xmlBase = '')
+    {
+        $this->model = $element;
+        $this->parent = $parent;
+    }
+
+    /**
+     * If an rdf:about attribute is specified, return that as an ID
+     *
+     * There is no established way of showing an ID for an RSS1 entry. We will 
+     * simulate it using the rdf:about attribute of the entry element. This cannot
+     * be relied upon for unique IDs but may prove useful.
+     *
+     * @return  string|false
+     */
+    function getId()
+    {
+        if ($this->model->attributes->getNamedItem('about')) {
+            return $this->model->attributes->getNamedItem('about')->nodeValue;
+        }
+        return false;
+    }
+
+    /**
+     * Return the entry's content
+     *
+     * The official way to include full content in an RSS1 entry is to use
+     * the content module's element 'encoded'. Often, however, the 'description'
+     * element is used instead. We will offer that as a fallback.
+     *
+     * @return  string|false
+     */
+    function getContent()
+    {
+        $options = array('encoded', 'description');
+        foreach ($options as $element) {
+            $test = $this->model->getElementsByTagName($element);
+            if ($test->length == 0) {
+                continue;
+            }
+            if ($test->item(0)->hasChildNodes()) {
+                $value = '';
+                foreach ($test->item(0)->childNodes as $child) {
+                    if ($child instanceof DOMText) {
+                        $value .= $child->nodeValue;
+                    } else {
+                        $simple = simplexml_import_dom($child);
+                        $value .= $simple->asXML();
+                    }
+                }
+                return $value;
+            } else if ($test->length > 0) {
+                return $test->item(0)->nodeValue;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * How RSS1.1 should support for enclosures is not clear. For now we will return
+     * false.
+     *
+     * @return  false
+     */
+    function getEnclosure()
+    {
+        return false;
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php
new file mode 100755 (executable)
index 0000000..8e36d5a
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * RSS1 Element class for XML_Feed_Parser
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS1Element.php,v 1.6 2006/06/30 17:41:56 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/*
+ * This class provides support for RSS 1.0 entries. It will usually be called by
+ * XML_Feed_Parser_RSS1 with which it shares many methods.
+ *
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser_RSS1Element extends XML_Feed_Parser_RSS1
+{
+    /**
+     * This will be a reference to the parent object for when we want
+     * to use a 'fallback' rule 
+     * @var XML_Feed_Parser_RSS1
+     */
+    protected $parent;
+
+    /**
+     * Our specific element map 
+     * @var array
+     */
+    protected $map = array(
+        'id' => array('Id'),
+        'title' => array('Text'),
+        'link' => array('Link'),
+        'description' => array('Text'), # or dc:description
+        'category' => array('Category'),
+        'rights' => array('Text'), # dc:rights
+        'creator' => array('Text'), # dc:creator
+        'publisher' => array('Text'), # dc:publisher
+        'contributor' => array('Text'), # dc:contributor
+        'date' => array('Date'), # dc:date
+        'content' => array('Content')
+        );
+
+    /**
+     * Here we map some elements to their atom equivalents. This is going to be
+     * quite tricky to pull off effectively (and some users' methods may vary)
+     * but is worth trying. The key is the atom version, the value is RSS1.
+     * @var array
+     */
+    protected $compatMap = array(
+        'content' => array('content'),
+        'updated' => array('lastBuildDate'),
+        'published' => array('pubdate'),
+        'subtitle' => array('description'),
+        'updated' => array('date'),
+        'author' => array('creator'),
+        'contributor' => array('contributor')
+    );
+
+    /**
+     * Store useful information for later.
+     *
+     * @param   DOMElement  $element - this item as a DOM element
+     * @param   XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
+     */
+    function __construct(DOMElement $element, $parent, $xmlBase = '')
+    {
+        $this->model = $element;
+        $this->parent = $parent;
+    }
+
+    /**
+     * If an rdf:about attribute is specified, return it as an ID
+     *
+     * There is no established way of showing an ID for an RSS1 entry. We will 
+     * simulate it using the rdf:about attribute of the entry element. This cannot
+     * be relied upon for unique IDs but may prove useful.
+     *
+     * @return  string|false
+     */
+    function getId()
+    {
+        if ($this->model->attributes->getNamedItem('about')) {
+            return $this->model->attributes->getNamedItem('about')->nodeValue;
+        }
+        return false;
+    }
+
+    /**
+     * How RSS1 should support for enclosures is not clear. For now we will return
+     * false.
+     *
+     * @return  false
+     */
+    function getEnclosure()
+    {
+        return false;
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php
new file mode 100644 (file)
index 0000000..0936bd2
--- /dev/null
@@ -0,0 +1,335 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Class representing feed-level data for an RSS2 feed
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS2.php,v 1.12 2008/03/08 18:16:45 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * This class handles RSS2 feeds.
+ * 
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser_RSS2 extends XML_Feed_Parser_Type
+{
+    /**
+     * The URI of the RelaxNG schema used to (optionally) validate the feed
+     * @var string
+     */
+    private $relax = 'rss20.rnc';
+
+    /**
+     * We're likely to use XPath, so let's keep it global
+     * @var DOMXPath
+     */
+    protected $xpath;
+
+    /**
+     * The feed type we are parsing
+     * @var string
+     */
+    public $version = 'RSS 2.0';
+
+    /**
+     * The class used to represent individual items
+     * @var string
+     */     
+    protected $itemClass = 'XML_Feed_Parser_RSS2Element';
+    
+    /**
+     * The element containing entries 
+     * @var string
+     */
+    protected $itemElement = 'item';
+
+    /**
+     * Here we map those elements we're not going to handle individually
+     * to the constructs they are. The optional second parameter in the array
+     * tells the parser whether to 'fall back' (not apt. at the feed level) or
+     * fail if the element is missing. If the parameter is not set, the function
+     * will simply return false and leave it to the client to decide what to do.
+     * @var array
+     */
+    protected $map = array(
+        'ttl' => array('Text'),
+        'pubDate' => array('Date'),
+        'lastBuildDate' => array('Date'),
+        'title' => array('Text'),
+        'link' => array('Link'),
+        'description' => array('Text'),
+        'language' => array('Text'),
+        'copyright' => array('Text'),
+        'managingEditor' => array('Text'),
+        'webMaster' => array('Text'),
+        'category' => array('Text'),
+        'generator' => array('Text'),
+        'docs' => array('Text'),
+        'ttl' => array('Text'),
+        'image' => array('Image'),
+        'skipDays' => array('skipDays'),
+        'skipHours' => array('skipHours'));
+
+    /**
+     * Here we map some elements to their atom equivalents. This is going to be
+     * quite tricky to pull off effectively (and some users' methods may vary)
+     * but is worth trying. The key is the atom version, the value is RSS2.
+     * @var array
+     */
+    protected $compatMap = array(
+        'title' => array('title'),
+        'rights' => array('copyright'),
+        'updated' => array('lastBuildDate'),
+        'subtitle' => array('description'),
+        'date' => array('pubDate'),
+        'author' => array('managingEditor'));
+
+    protected $namespaces = array(
+        'dc' => 'http://purl.org/rss/1.0/modules/dc/',
+        'content' => 'http://purl.org/rss/1.0/modules/content/');
+
+    /**
+     * Our constructor does nothing more than its parent.
+     * 
+     * @param    DOMDocument    $xml    A DOM object representing the feed
+     * @param    bool (optional) $string    Whether or not to validate this feed
+     */
+    function __construct(DOMDocument $model, $strict = false)
+    {
+        $this->model = $model;
+
+        if ($strict) {
+            if (! $this->model->relaxNGValidate($this->relax)) {
+                throw new XML_Feed_Parser_Exception('Failed required validation');
+            }
+        }
+
+        $this->xpath = new DOMXPath($this->model);
+        foreach ($this->namespaces as $key => $value) {
+            $this->xpath->registerNamespace($key, $value);
+        }
+        $this->numberEntries = $this->count('item');
+    }
+
+    /**
+     * Retrieves an entry by ID, if the ID is specified with the guid element
+     *
+     * This is not really something that will work with RSS2 as it does not have
+     * clear restrictions on the global uniqueness of IDs. But we can emulate
+     * it by allowing access based on the 'guid' element. If DOMXPath::evaluate
+     * is available, we also use that to store a reference to the entry in the array
+     * used by getEntryByOffset so that method does not have to seek out the entry
+     * if it's requested that way.
+     *
+     * @param    string    $id    any valid ID.
+     * @return    XML_Feed_Parser_RSS2Element
+     */
+    function getEntryById($id)
+    {
+        if (isset($this->idMappings[$id])) {
+            return $this->entries[$this->idMappings[$id]];
+        }
+
+        $entries = $this->xpath->query("//item[guid='$id']");
+        if ($entries->length > 0) {
+            $entry = new $this->itemElement($entries->item(0), $this);
+            if (in_array('evaluate', get_class_methods($this->xpath))) {
+                $offset = $this->xpath->evaluate("count(preceding-sibling::item)", $entries->item(0));
+                $this->entries[$offset] = $entry;
+            }
+            $this->idMappings[$id] = $entry;
+            return $entry;
+        }        
+    }
+
+    /**
+     * Get a category from the element
+     *
+     * The category element is a simple text construct which can occur any number
+     * of times. We allow access by offset or access to an array of results.
+     *
+     * @param    string    $call    for compatibility with our overloading
+     * @param   array $arguments - arg 0 is the offset, arg 1 is whether to return as array
+     * @return  string|array|false
+     */
+    function getCategory($call, $arguments = array())
+    {
+        $categories = $this->model->getElementsByTagName('category');
+        $offset = empty($arguments[0]) ? 0 : $arguments[0];
+        $array = empty($arguments[1]) ? false : true;
+        if ($categories->length <= $offset) {
+            return false;
+        }
+        if ($array) {
+            $list = array();
+            foreach ($categories as $category) {
+                array_push($list, $category->nodeValue);
+            }
+            return $list;
+        }
+        return $categories->item($offset)->nodeValue;
+    }
+
+    /**
+     * Get details of the image associated with the feed.
+     *
+     * @return  array|false an array simply containing the child elements
+     */
+    protected function getImage()
+    {
+        $images = $this->xpath->query("//image");
+        if ($images->length > 0) {
+            $image = $images->item(0);
+            $desc = $image->getElementsByTagName('description');
+            $description = $desc->length ? $desc->item(0)->nodeValue : false;
+            $heigh = $image->getElementsByTagName('height'); 
+            $height = $heigh->length ? $heigh->item(0)->nodeValue : false;
+            $widt = $image->getElementsByTagName('width'); 
+            $width = $widt->length ? $widt->item(0)->nodeValue : false;
+            return array(
+                'title' => $image->getElementsByTagName('title')->item(0)->nodeValue,
+                'link' => $image->getElementsByTagName('link')->item(0)->nodeValue,
+                'url' => $image->getElementsByTagName('url')->item(0)->nodeValue,
+                'description' => $description,
+                'height' => $height,
+                'width' => $width);
+        }
+        return false;
+    }
+
+    /**
+     * The textinput element is little used, but in the interests of
+     * completeness...
+     *
+     * @return  array|false
+     */
+    function getTextInput()
+    {
+        $inputs = $this->model->getElementsByTagName('input');
+        if ($inputs->length > 0) {
+            $input = $inputs->item(0);
+            return array(
+                'title' => $input->getElementsByTagName('title')->item(0)->value,
+                'description' => 
+                    $input->getElementsByTagName('description')->item(0)->value,
+                'name' => $input->getElementsByTagName('name')->item(0)->value,
+                'link' => $input->getElementsByTagName('link')->item(0)->value);
+        }
+        return false;
+    }
+
+    /**
+     * Utility function for getSkipDays and getSkipHours
+     *
+     * This is a general function used by both getSkipDays and getSkipHours. It simply
+     * returns an array of the values of the children of the appropriate tag.
+     *
+     * @param   string      $tagName    The tag name (getSkipDays or getSkipHours)
+     * @return  array|false
+     */
+    protected function getSkips($tagName)
+    {
+        $hours = $this->model->getElementsByTagName($tagName);
+        if ($hours->length == 0) {
+            return false;
+        }
+        $skipHours = array();
+        foreach($hours->item(0)->childNodes as $hour) {
+            if ($hour instanceof DOMElement) {
+                array_push($skipHours, $hour->nodeValue);
+            }
+        }
+        return $skipHours;
+    }
+
+    /**
+     * Retrieve skipHours data
+     *
+     * The skiphours element provides a list of hours on which this feed should
+     * not be checked. We return an array of those hours (integers, 24 hour clock)
+     *
+     * @return  array
+     */    
+    function getSkipHours()
+    {
+        return $this->getSkips('skipHours');
+    }
+
+    /**
+     * Retrieve skipDays data
+     *
+     * The skipdays element provides a list of days on which this feed should
+     * not be checked. We return an array of those days.
+     *
+     * @return  array
+     */
+    function getSkipDays()
+    {
+        return $this->getSkips('skipDays');
+    }
+
+    /**
+     * Return content of the little-used 'cloud' element
+     *
+     * The cloud element is rarely used. It is designed to provide some details
+     * of a location to update the feed.
+     *
+     * @return  array   an array of the attributes of the element
+     */
+    function getCloud()
+    {
+        $cloud = $this->model->getElementsByTagName('cloud');
+        if ($cloud->length == 0) {
+            return false;
+        }
+        $cloudData = array();
+        foreach ($cloud->item(0)->attributes as $attribute) {
+            $cloudData[$attribute->name] = $attribute->value;
+        }
+        return $cloudData;
+    }
+    
+    /**
+     * Get link URL
+     *
+     * In RSS2 a link is a text element but in order to ensure that we resolve
+     * URLs properly we have a special function for them. We maintain the 
+     * parameter used by the atom getLink method, though we only use the offset
+     * parameter.
+     *
+     * @param   int     $offset The position of the link within the feed. Starts from 0
+     * @param   string  $attribute  The attribute of the link element required
+     * @param   array   $params An array of other parameters. Not used.
+     * @return  string
+     */
+    function getLink($offset, $attribute = 'href', $params = array())
+    {
+        $xPath = new DOMXPath($this->model);
+        $links = $xPath->query('//link');
+
+        if ($links->length <= $offset) {
+            return false;
+        }
+        $link = $links->item($offset);
+        return $this->addBase($link->nodeValue, $link);
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php
new file mode 100755 (executable)
index 0000000..6edf910
--- /dev/null
@@ -0,0 +1,171 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Class representing entries in an RSS2 feed.
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: RSS2Element.php,v 1.11 2006/07/26 21:18:47 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * This class provides support for RSS 2.0 entries. It will usually be 
+ * called by XML_Feed_Parser_RSS2 with which it shares many methods.
+ *
+ * @author    James Stewart <james@jystewart.net>
+ * @version    Release: 1.0.3
+ * @package XML_Feed_Parser
+ */
+class XML_Feed_Parser_RSS2Element extends XML_Feed_Parser_RSS2
+{
+    /**
+     * This will be a reference to the parent object for when we want
+     * to use a 'fallback' rule
+     * @var XML_Feed_Parser_RSS2
+     */
+    protected $parent;
+
+    /**
+     * Our specific element map 
+     * @var array
+     */
+    protected $map = array(
+        'title' => array('Text'),
+        'guid' => array('Guid'),
+        'description' => array('Text'),
+        'author' => array('Text'),
+        'comments' => array('Text'),
+        'enclosure' => array('Enclosure'),
+        'pubDate' => array('Date'),
+        'source' => array('Source'),
+        'link' => array('Text'),
+        'content' => array('Content'));
+
+    /**
+     * Here we map some elements to their atom equivalents. This is going to be
+     * quite tricky to pull off effectively (and some users' methods may vary)
+     * but is worth trying. The key is the atom version, the value is RSS2.
+     * @var array
+     */
+    protected $compatMap = array(
+        'id' => array('guid'),
+        'updated' => array('lastBuildDate'),
+        'published' => array('pubdate'),
+        'guidislink' => array('guid', 'ispermalink'),
+        'summary' => array('description'));
+
+    /**
+     * Store useful information for later.
+     *
+     * @param   DOMElement  $element - this item as a DOM element
+     * @param   XML_Feed_Parser_RSS2    $parent - the feed of which this is a member
+     */
+    function __construct(DOMElement $element, $parent, $xmlBase = '')
+    {
+        $this->model = $element;
+        $this->parent = $parent;
+    }
+
+    /**
+     * Get the value of the guid element, if specified
+     *
+     * guid is the closest RSS2 has to atom's ID. It is usually but not always a
+     * URI. The one attribute that RSS2 can posess is 'ispermalink' which specifies
+     * whether the guid is itself dereferencable. Use of guid is not obligatory,
+     * but is advisable. To get the guid you would call $item->id() (for atom
+     * compatibility) or $item->guid(). To check if this guid is a permalink call
+     * $item->guid("ispermalink").
+     *
+     * @param   string  $method - the method name being called
+     * @param   array   $params - parameters required
+     * @return  string  the guid or value of ispermalink
+     */
+    protected function getGuid($method, $params)
+    {
+        $attribute = (isset($params[0]) and $params[0] == 'ispermalink') ? 
+            true : false;
+        $tag = $this->model->getElementsByTagName('guid');
+        if ($tag->length > 0) {
+            if ($attribute) {
+                if ($tag->hasAttribute("ispermalink")) {
+                    return $tag->getAttribute("ispermalink");
+                }
+            }
+            return $tag->item(0)->nodeValue;
+        }
+        return false;
+    }
+
+    /**
+     * Access details of file enclosures
+     *
+     * The RSS2 spec is ambiguous as to whether an enclosure element must be
+     * unique in a given entry. For now we will assume it needn't, and allow
+     * for an offset.
+     *
+     * @param   string $method - the method being called
+     * @param   array   $parameters - we expect the first of these to be our offset
+     * @return  array|false
+     */
+    protected function getEnclosure($method, $parameters)
+    {
+        $encs = $this->model->getElementsByTagName('enclosure');
+        $offset = isset($parameters[0]) ? $parameters[0] : 0;
+        if ($encs->length > $offset) {
+            try {
+                if (! $encs->item($offset)->hasAttribute('url')) {
+                    return false;
+                }
+                $attrs = $encs->item($offset)->attributes;
+                return array(
+                    'url' => $attrs->getNamedItem('url')->value,
+                    'length' => $attrs->getNamedItem('length')->value,
+                    'type' => $attrs->getNamedItem('type')->value);
+            } catch (Exception $e) {
+                return false;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Get the entry source if specified
+     *
+     * source is an optional sub-element of item. Like atom:source it tells
+     * us about where the entry came from (eg. if it's been copied from another
+     * feed). It is not a rich source of metadata in the same way as atom:source
+     * and while it would be good to maintain compatibility by returning an
+     * XML_Feed_Parser_RSS2 element, it makes a lot more sense to return an array.
+     *
+     * @return array|false
+     */
+    protected function getSource()
+    {
+        $get = $this->model->getElementsByTagName('source');
+        if ($get->length) {
+            $source = $get->item(0);
+            $array = array(
+                'content' => $source->nodeValue);
+            foreach ($source->attributes as $attribute) {
+                $array[$attribute->name] = $attribute->value;
+            }
+            return $array;
+        }
+        return false;
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/Type.php b/plugins/OStatus/extlib/XML/Feed/Parser/Type.php
new file mode 100644 (file)
index 0000000..7505261
--- /dev/null
@@ -0,0 +1,467 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Abstract class providing common methods for XML_Feed_Parser feeds.
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category   XML
+ * @package    XML_Feed_Parser
+ * @author     James Stewart <james@jystewart.net>
+ * @copyright  2005 James Stewart <james@jystewart.net>
+ * @license    http://www.gnu.org/copyleft/lesser.html  GNU LGPL 2.1
+ * @version    CVS: $Id: Type.php,v 1.25 2008/03/08 18:39:09 jystewart Exp $
+ * @link       http://pear.php.net/package/XML_Feed_Parser/
+ */
+
+/**
+ * This abstract class provides some general methods that are likely to be
+ * implemented exactly the same way for all feed types.
+ *
+ * @package XML_Feed_Parser
+ * @author  James Stewart <james@jystewart.net>
+ * @version Release: 1.0.3
+ */
+abstract class XML_Feed_Parser_Type
+{
+    /**
+     * Where we store our DOM object for this feed 
+     * @var DOMDocument
+     */
+    public $model;
+
+    /**
+     * For iteration we'll want a count of the number of entries 
+     * @var int
+     */
+    public $numberEntries;
+
+    /**
+     * Where we store our entry objects once instantiated 
+     * @var array
+     */
+    public $entries = array();
+
+    /**
+     * Store mappings between entry IDs and their position in the feed
+     */
+    public $idMappings = array();
+
+    /**
+     * Proxy to allow use of element names as method names
+     *
+     * We are not going to provide methods for every entry type so this
+     * function will allow for a lot of mapping. We rely pretty heavily
+     * on this to handle our mappings between other feed types and atom.
+     *
+     * @param   string  $call - the method attempted
+     * @param   array   $arguments - arguments to that method
+     * @return  mixed
+     */
+    function __call($call, $arguments = array())
+    {
+        if (! is_array($arguments)) {
+            $arguments = array();
+        }
+
+        if (isset($this->compatMap[$call])) {
+            $tempMap = $this->compatMap;
+            $tempcall = array_pop($tempMap[$call]);
+            if (! empty($tempMap)) {
+                $arguments = array_merge($arguments, $tempMap[$call]);
+            }
+            $call = $tempcall;
+        }
+
+        /* To be helpful, we allow a case-insensitive search for this method */
+        if (! isset($this->map[$call])) {
+            foreach (array_keys($this->map) as $key) {
+                if (strtoupper($key) == strtoupper($call)) {
+                    $call = $key;
+                    break;
+                }
+            }
+        }
+
+        if (empty($this->map[$call])) {
+            return false;
+        }
+
+        $method = 'get' . $this->map[$call][0];
+        if ($method == 'getLink') {
+            $offset = empty($arguments[0]) ? 0 : $arguments[0];
+            $attribute = empty($arguments[1]) ? 'href' : $arguments[1];
+            $params = isset($arguments[2]) ? $arguments[2] : array();
+            return $this->getLink($offset, $attribute, $params);
+        }
+        if (method_exists($this, $method)) {
+            return $this->$method($call, $arguments);
+        }
+
+        return false;
+    }
+
+    /**
+     * Proxy to allow use of element names as attribute names
+     *
+     * For many elements variable-style access will be desirable. This function
+     * provides for that.
+     *
+     * @param   string  $value - the variable required
+     * @return  mixed
+     */
+    function __get($value)
+    {
+        return $this->__call($value, array());
+    }
+
+    /**
+     * Utility function to help us resolve xml:base values
+     *
+     * We have other methods which will traverse the DOM and work out the different
+     * xml:base declarations we need to be aware of. We then need to combine them.
+     * If a declaration starts with a protocol then we restart the string. If it 
+     * starts with a / then we add on to the domain name. Otherwise we simply tag 
+     * it on to the end.
+     *
+     * @param   string  $base - the base to add the link to
+     * @param   string  $link
+     */
+    function combineBases($base, $link)
+    {
+        if (preg_match('/^[A-Za-z]+:\/\//', $link)) {
+            return $link;
+        } else if (preg_match('/^\//', $link)) {
+            /* Extract domain and suffix link to that */
+            preg_match('/^([A-Za-z]+:\/\/.*)?\/*/', $base, $results);
+            $firstLayer = $results[0];
+            return $firstLayer . "/" . $link;
+        } else if (preg_match('/^\.\.\//', $base)) {
+            /* Step up link to find place to be */
+            preg_match('/^((\.\.\/)+)(.*)$/', $link, $bases);
+            $suffix = $bases[3];
+            $count = preg_match_all('/\.\.\//', $bases[1], $steps);
+            $url = explode("/", $base);
+            for ($i = 0; $i <= $count; $i++) {
+                array_pop($url);
+            }
+            return implode("/", $url) . "/" . $suffix;
+        } else if (preg_match('/^(?!\/$)/', $base)) {
+            $base = preg_replace('/(.*\/).*$/', '$1', $base)  ;
+            return $base . $link;
+        } else {
+            /* Just stick it on the end */
+            return $base . $link;
+        }
+    }
+
+    /**
+     * Determine whether we need to apply our xml:base rules
+     *
+     * Gets us the xml:base data and then processes that with regard
+     * to our current link.
+     *
+     * @param   string
+     * @param   DOMElement
+     * @return  string
+     */
+    function addBase($link, $element)
+    {
+        if (preg_match('/^[A-Za-z]+:\/\//', $link)) {
+            return $link;
+        }
+
+        return $this->combineBases($element->baseURI, $link);
+    }
+
+    /**
+     * Get an entry by its position in the feed, starting from zero
+     *
+     * As well as allowing the items to be iterated over we want to allow
+     * users to be able to access a specific entry. This is one of two ways of
+     * doing that, the other being by ID.
+     * 
+     * @param   int $offset
+     * @return  XML_Feed_Parser_RSS1Element
+     */
+    function getEntryByOffset($offset)
+    {
+        if (! isset($this->entries[$offset])) {
+            $entries = $this->model->getElementsByTagName($this->itemElement);
+            if ($entries->length > $offset) {
+                $xmlBase = $entries->item($offset)->baseURI;
+                $this->entries[$offset] = new $this->itemClass(
+                    $entries->item($offset), $this, $xmlBase);
+                if ($id = $this->entries[$offset]->id) {
+                    $this->idMappings[$id] = $this->entries[$offset];
+                }
+            } else {
+                throw new XML_Feed_Parser_Exception('No entries found');
+            }
+        }
+
+        return $this->entries[$offset];
+    }
+
+    /**
+     * Return a date in seconds since epoch.
+     *
+     * Get a date construct. We use PHP's strtotime to return it as a unix datetime, which
+     * is the number of seconds since 1970-01-01 00:00:00.
+     * 
+     * @link    http://php.net/strtotime
+     * @param    string    $method        The name of the date construct we want
+     * @param    array     $arguments    Included for compatibility with our __call usage
+     * @return    int|false datetime
+     */
+    protected function getDate($method, $arguments)
+    {
+        $time = $this->model->getElementsByTagName($method);
+        if ($time->length == 0 || empty($time->item(0)->nodeValue)) {
+            return false;
+        }
+        return strtotime($time->item(0)->nodeValue);
+    }
+
+    /**
+     * Get a text construct. 
+     *
+     * @param    string    $method    The name of the text construct we want
+     * @param    array     $arguments    Included for compatibility with our __call usage
+     * @return    string
+     */
+    protected function getText($method, $arguments = array())
+    {
+        $tags = $this->model->getElementsByTagName($method);
+        if ($tags->length > 0) {
+            $value = $tags->item(0)->nodeValue;
+            return $value;
+        }
+        return false;
+    }
+
+    /**
+     * Apply various rules to retrieve category data.
+     *
+     * There is no single way of declaring a category in RSS1/1.1 as there is in RSS2 
+     * and  Atom. Instead the usual approach is to use the dublin core namespace to 
+     * declare  categories. For example delicious use both: 
+     * <dc:subject>PEAR</dc:subject> and: <taxo:topics><rdf:Bag>
+     * <rdf:li resource="http://del.icio.us/tag/PEAR" /></rdf:Bag></taxo:topics>
+     * to declare a categorisation of 'PEAR'.
+     *
+     * We need to be sensitive to this where possible.
+     *
+     * @param    string    $call    for compatibility with our overloading
+     * @param   array $arguments - arg 0 is the offset, arg 1 is whether to return as array
+     * @return  string|array|false
+     */
+    protected function getCategory($call, $arguments)
+    {
+        $categories = $this->model->getElementsByTagName('subject');
+        $offset = empty($arguments[0]) ? 0 : $arguments[0];
+        $array = empty($arguments[1]) ? false : true;
+        if ($categories->length <= $offset) {
+            return false;
+        }
+        if ($array) {
+            $list = array();
+            foreach ($categories as $category) {
+                array_push($list, $category->nodeValue);
+            }
+            return $list;
+        }
+        return $categories->item($offset)->nodeValue;
+    }
+
+    /**
+     * Count occurrences of an element
+     *
+     * This function will tell us how many times the element $type
+     * appears at this level of the feed.
+     * 
+     * @param    string    $type    the element we want to get a count of
+     * @return    int
+     */
+    protected function count($type)
+    {
+        if ($tags = $this->model->getElementsByTagName($type)) {
+            return $tags->length;
+        }
+        return 0;
+    }
+
+    /**
+     * Part of our xml:base processing code
+     *
+     * We need a couple of methods to access XHTML content stored in feeds. 
+     * This is because we dereference all xml:base references before returning
+     * the element. This method handles the attributes.
+     *
+     * @param   DOMElement $node    The DOM node we are iterating over
+     * @return  string
+     */
+    function processXHTMLAttributes($node) {
+        $return = '';
+        foreach ($node->attributes as $attribute) {
+            if ($attribute->name == 'src' or $attribute->name == 'href') {
+                $attribute->value = $this->addBase(htmlentities($attribute->value, NULL, 'utf-8'), $attribute);
+            }
+            if ($attribute->name == 'base') {
+                continue;
+            }
+            $return .= $attribute->name . '="' . htmlentities($attribute->value, NULL, 'utf-8') .'" ';
+        }
+        if (! empty($return)) {
+            return ' ' . trim($return);
+        }
+        return '';
+    }
+
+    /**
+     * Convert HTML entities based on the current character set.
+     * 
+     * @param String
+     * @return String
+     */
+    function processEntitiesForNodeValue($node) 
+    {
+        if (function_exists('iconv')) {
+          $current_encoding = $node->ownerDocument->encoding;
+          $value = iconv($current_encoding, 'UTF-8', $node->nodeValue);
+        } else if ($current_encoding == 'iso-8859-1') {
+          $value = utf8_encode($node->nodeValue);
+        } else {
+          $value = $node->nodeValue;
+        }
+
+        $decoded = html_entity_decode($value, NULL, 'UTF-8');
+        return htmlentities($decoded, NULL, 'UTF-8');
+    }
+
+    /**
+     * Part of our xml:base processing code
+     *
+     * We need a couple of methods to access XHTML content stored in feeds. 
+     * This is because we dereference all xml:base references before returning
+     * the element. This method recurs through the tree descending from the node
+     * and builds our string.
+     *
+     * @param   DOMElement $node    The DOM node we are processing
+     * @return   string
+     */
+    function traverseNode($node)
+    {
+        $content = '';
+
+        /* Add the opening of this node to the content */
+        if ($node instanceof DOMElement) {
+            $content .= '<' . $node->tagName . 
+                $this->processXHTMLAttributes($node) . '>';
+        }
+
+        /* Process children */
+        if ($node->hasChildNodes()) {
+            foreach ($node->childNodes as $child) {
+                $content .= $this->traverseNode($child);
+            }
+        }
+
+        if ($node instanceof DOMText) {
+            $content .= $this->processEntitiesForNodeValue($node);
+        }
+
+        /* Add the closing of this node to the content */
+        if ($node instanceof DOMElement) {
+            $content .= '</' . $node->tagName . '>';
+        }
+
+        return $content;
+    }
+
+    /**
+     * Get content from RSS feeds (atom has its own implementation)
+     *
+     * The official way to include full content in an RSS1 entry is to use
+     * the content module's element 'encoded', and RSS2 feeds often duplicate that.
+     * Often, however, the 'description' element is used instead. We will offer that 
+     * as a fallback. Atom uses its own approach and overrides this method.
+     *
+     * @return  string|false
+     */
+    protected function getContent()
+    {
+        $options = array('encoded', 'description');
+        foreach ($options as $element) {
+            $test = $this->model->getElementsByTagName($element);
+            if ($test->length == 0) {
+                continue;
+            }
+            if ($test->item(0)->hasChildNodes()) {
+                $value = '';
+                foreach ($test->item(0)->childNodes as $child) {
+                    if ($child instanceof DOMText) {
+                        $value .= $child->nodeValue;
+                    } else {
+                        $simple = simplexml_import_dom($child);
+                        $value .= $simple->asXML();
+                    }
+                }
+                return $value;
+            } else if ($test->length > 0) {
+                return $test->item(0)->nodeValue;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Checks if this element has a particular child element.
+     *
+     * @param   String
+     * @param   Integer
+     * @return  bool
+     **/
+    function hasKey($name, $offset = 0)
+    {
+        $search = $this->model->getElementsByTagName($name);
+        return $search->length > $offset;
+    }
+
+    /**
+     * Return an XML serialization of the feed, should it be required. Most 
+     * users however, will already have a serialization that they used when 
+     * instantiating the object.
+     *
+     * @return    string    XML serialization of element
+     */    
+    function __toString()
+    {
+        $simple = simplexml_import_dom($this->model);
+        return $simple->asXML();
+    }
+    
+    /**
+     * Get directory holding RNG schemas. Method is based on that 
+     * found in Contact_AddressBook.
+     *
+     * @return string PEAR data directory.
+     * @access public
+     * @static
+     */
+    static function getSchemaDir()
+    {
+        require_once 'PEAR/Config.php';
+        $config = new PEAR_Config;
+        return $config->get('data_dir') . '/XML_Feed_Parser/schemas';
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml
new file mode 100755 (executable)
index 0000000..02e1c58
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<entry xmlns="http://www.w3.org/2005/Atom">
+    <title>Atom draft-07 snapshot</title>
+    <link rel="alternate" type="text/html" 
+     href="http://example.org/2005/04/02/atom"/>
+    <link rel='enclosure' type="audio/mpeg" length="1337"
+     href="http://example.org/audio/ph34r_my_podcast.mp3"/>
+    <id>tag:example.org,2003:3.2397</id>
+    <updated>2005-07-10T12:29:29Z</updated>
+    <published>2003-12-13T08:29:29-04:00</published>
+    <author>
+      <name>Mark Pilgrim</name>
+      <uri>http://example.org/</uri>
+      <email>f8dy@example.com</email>
+    </author>
+    <contributor>
+      <name>Sam Ruby</name>
+    </contributor>
+    <contributor>
+      <name>Joe Gregorio</name>
+    </contributor>
+    <content type="xhtml" xml:lang="en" 
+     xml:base="http://diveintomark.org/">
+      <div xmlns="http://www.w3.org/1999/xhtml">
+        <p><i>[Update: The Atom draft is finished.]</i></p>
+      </div>
+    </content>
+  </entry>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml
new file mode 100755 (executable)
index 0000000..d181d2b
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title>Example Feed</title>
+ <link href="http://example.org/"/>
+ <updated>2003-12-13T18:30:02Z</updated>
+ <author>
+   <name>John Doe</name>
+ </author>
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
+
+ <entry>
+   <title>Atom-Powered Robots Run Amok</title>
+   <link href="http://example.org/2003/12/13/atom03"/>
+   <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
+   <updated>2003-12-13T18:30:02Z</updated>
+   <summary>Some text.</summary>
+ </entry>
+
+</feed>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml
new file mode 100755 (executable)
index 0000000..98abf9d
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+   <feed xmlns="http://www.w3.org/2005/Atom">
+     <title type="text">dive into mark</title>
+     <subtitle type="html">
+       A &lt;em&gt;lot&lt;/em&gt; of effort
+       went into making this effortless
+     </subtitle>
+     <updated>2005-07-31T12:29:29Z</updated>
+     <id>tag:example.org,2003:3</id>
+     <link rel="alternate" type="text/html"
+      hreflang="en" href="http://example.org/"/>
+     <link rel="self" type="application/atom+xml"
+      href="http://example.org/feed.atom"/>
+     <rights>Copyright (c) 2003, Mark Pilgrim</rights>
+     <generator uri="http://www.example.com/" version="1.0">
+       Example Toolkit
+     </generator>
+     <entry>
+       <title>Atom draft-07 snapshot</title>
+       <link rel="alternate" type="text/html"
+        href="http://example.org/2005/04/02/atom"/>
+       <link rel='enclosure' type="audio/mpeg" length="1337"
+        href="http://example.org/audio/ph34r_my_podcast.mp3"/>
+       <id>tag:example.org,2003:3.2397</id>
+       <updated>2005-07-31T12:29:29Z</updated>
+       <published>2003-12-13T08:29:29-04:00</published>
+       <author>
+         <name>Mark Pilgrim</name>
+         <uri>http://example.org/</uri>
+         <email>f8dy@example.com</email>
+       </author>
+       <contributor>
+         <name>Sam Ruby</name>
+       </contributor>
+       <contributor>
+         <name>Joe Gregorio</name>
+       </contributor>
+       <content type="xhtml" xml:lang="en"
+        xml:base="http://diveintomark.org/">
+         <div xmlns="http://www.w3.org/1999/xhtml">
+           <p><i>[Update: The Atom draft is finished.]</i></p>
+         </div>
+       </content>
+     </entry>
+   </feed>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/delicious.feed b/plugins/OStatus/extlib/XML/Feed/samples/delicious.feed
new file mode 100755 (executable)
index 0000000..32f9fa4
--- /dev/null
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<rdf:RDF
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns="http://purl.org/rss/1.0/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
+ xmlns:admin="http://webns.net/mvcb/"
+>
+<channel rdf:about="http://del.icio.us/tag/greenbelt">
+<title>del.icio.us/tag/greenbelt</title>
+<link>http://del.icio.us/tag/greenbelt</link>
+<description>Text</description>
+<items>
+ <rdf:Seq>
+  <rdf:li rdf:resource="http://www.greenbelt.org.uk/" />
+  <rdf:li rdf:resource="http://www.greenbelt.org.uk/" />
+  <rdf:li rdf:resource="http://www.natuerlichwien.at/rundumadum/dergruenguertel/" />
+  <rdf:li rdf:resource="http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars" />
+  <rdf:li rdf:resource="http://www.greenbelt.ca/home.htm" />
+  <rdf:li rdf:resource="http://pipwilsonbhp.blogspot.com/" />
+  <rdf:li rdf:resource="http://maggidawn.typepad.com/maggidawn/" />
+  <rdf:li rdf:resource="http://www.johndavies.org/" />
+  <rdf:li rdf:resource="http://jonnybaker.blogs.com/" />
+ </rdf:Seq>
+</items>
+</channel>
+
+<item rdf:about="http://www.greenbelt.org.uk/">
+<dc:title>Greenbelt - Homepage Section</dc:title>
+<link>http://www.greenbelt.org.uk/</link>
+<dc:creator>jonnybaker</dc:creator>
+<dc:date>2005-05-16T16:30:38Z</dc:date>
+<dc:subject>greenbelt</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://www.greenbelt.org.uk/">
+<title>Greenbelt festival (uk)</title>
+<link>http://www.greenbelt.org.uk/</link>
+<dc:creator>sssshhhh</dc:creator>
+<dc:date>2005-05-14T18:19:40Z</dc:date>
+<dc:subject>audiology festival gigs greenbelt</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/gigs" />
+    <rdf:li resource="http://del.icio.us/tag/audiology" />
+    <rdf:li resource="http://del.icio.us/tag/festival" />
+    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://www.natuerlichwien.at/rundumadum/dergruenguertel/">
+<title>Natuerlichwien.at - Rundumadum</title>
+<link>http://www.natuerlichwien.at/rundumadum/dergruenguertel/</link>
+<dc:creator>egmilman47</dc:creator>
+<dc:date>2005-05-06T21:33:41Z</dc:date>
+<dc:subject>Austria Vienna Wien greenbelt nature walking</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/Vienna" />
+    <rdf:li resource="http://del.icio.us/tag/Wien" />
+    <rdf:li resource="http://del.icio.us/tag/Austria" />
+    <rdf:li resource="http://del.icio.us/tag/walking" />
+    <rdf:li resource="http://del.icio.us/tag/nature" />
+    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars">
+<title>Tank - GBMediaWiki</title>
+<link>http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars</link>
+<dc:creator>jystewart</dc:creator>
+<dc:date>2005-03-21T22:44:11Z</dc:date>
+<dc:subject>greenbelt</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://www.greenbelt.ca/home.htm">
+<title>Greenbelt homepage</title>
+<link>http://www.greenbelt.ca/home.htm</link>
+<dc:creator>Gooberoo</dc:creator>
+<dc:date>2005-03-01T22:43:17Z</dc:date>
+<dc:subject>greenbelt ontario</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/ontario" />
+    <rdf:li resource="http://del.icio.us/tag/greenbelt" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://pipwilsonbhp.blogspot.com/">
+<title>Pip Wilson bhp ...... blog</title>
+<link>http://pipwilsonbhp.blogspot.com/</link>
+<dc:creator>sssshhhh</dc:creator>
+<dc:date>2004-12-27T11:20:51Z</dc:date>
+<dc:subject>Greenbelt friend ideas links thinking weblog</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
+    <rdf:li resource="http://del.icio.us/tag/thinking" />
+    <rdf:li resource="http://del.icio.us/tag/ideas" />
+    <rdf:li resource="http://del.icio.us/tag/links" />
+    <rdf:li resource="http://del.icio.us/tag/friend" />
+    <rdf:li resource="http://del.icio.us/tag/weblog" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://maggidawn.typepad.com/maggidawn/">
+<title>maggi dawn</title>
+<link>http://maggidawn.typepad.com/maggidawn/</link>
+<dc:creator>sssshhhh</dc:creator>
+<dc:date>2004-12-27T11:20:11Z</dc:date>
+<dc:subject>Greenbelt ideas links thinking weblog</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
+    <rdf:li resource="http://del.icio.us/tag/thinking" />
+    <rdf:li resource="http://del.icio.us/tag/ideas" />
+    <rdf:li resource="http://del.icio.us/tag/links" />
+    <rdf:li resource="http://del.icio.us/tag/weblog" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://www.johndavies.org/">
+<title>John Davies</title>
+<link>http://www.johndavies.org/</link>
+<dc:creator>sssshhhh</dc:creator>
+<dc:date>2004-12-27T11:18:37Z</dc:date>
+<dc:subject>Greenbelt ideas links thinking weblog</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
+    <rdf:li resource="http://del.icio.us/tag/thinking" />
+    <rdf:li resource="http://del.icio.us/tag/ideas" />
+    <rdf:li resource="http://del.icio.us/tag/links" />
+    <rdf:li resource="http://del.icio.us/tag/weblog" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+<item rdf:about="http://jonnybaker.blogs.com/">
+<title>jonnybaker</title>
+<link>http://jonnybaker.blogs.com/</link>
+<dc:creator>sssshhhh</dc:creator>
+<dc:date>2004-12-27T11:18:17Z</dc:date>
+<dc:subject>Greenbelt event ideas links resources thinking weblog youth</dc:subject>
+<taxo:topics>
+  <rdf:Bag>
+    <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
+    <rdf:li resource="http://del.icio.us/tag/thinking" />
+    <rdf:li resource="http://del.icio.us/tag/ideas" />
+    <rdf:li resource="http://del.icio.us/tag/links" />
+    <rdf:li resource="http://del.icio.us/tag/weblog" />
+    <rdf:li resource="http://del.icio.us/tag/youth" />
+    <rdf:li resource="http://del.icio.us/tag/event" />
+    <rdf:li resource="http://del.icio.us/tag/resources" />
+  </rdf:Bag>
+</taxo:topics>
+</item>
+
+</rdf:RDF>
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/flickr.feed b/plugins/OStatus/extlib/XML/Feed/samples/flickr.feed
new file mode 100755 (executable)
index 0000000..57e83af
--- /dev/null
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>\r
+<feed version="0.3" xmlns="http://purl.org/atom/ns#" \r
+    xmlns:dc="http://purl.org/dc/elements/1.1/">\r
+\r
+       <title>jamesstewart - Everyone's Tagged Photos</title>\r
+       <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/tags/jamesstewart/"/>\r
+       <link rel="icon" type="image/jpeg" href="http://www.flickr.com/images/buddyicon.jpg"/>\r
+       <info type="text/html" mode="escaped">A feed of jamesstewart - Everyone's Tagged Photos</info>\r
+       <modified>2005-08-01T18:50:26Z</modified>\r
+       <generator url="http://www.flickr.com/">Flickr</generator>\r
+\r
+       <entry>\r
+               <title>Oma and James</title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/30484029@N00/30367516/"/>\r
+               <link rel='enclosure' type="application/xml" href="http://james.anthropiccollective.org" />\r
+               <id>tag:flickr.com,2004:/photo/30367516</id>\r
+               <issued>2005-08-01T18:50:26Z</issued>\r
+               <modified>2005-08-01T18:50:26Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/30484029@N00/&quot;&gt;kstewart&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/30484029@N00/30367516/&quot; title=&quot;Oma and James&quot;&gt;&lt;img src=&quot;http://photos23.flickr.com/30367516_1f685a16e8_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Oma and James&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+&lt;p&gt;I have a beautiful Oma and a gorgeous husband.&lt;/p&gt;</content>\r
+               <author>\r
+                       <name>kstewart</name>\r
+                       <url>http://www.flickr.com/people/30484029@N00/</url>\r
+               </author>\r
+                               <dc:subject>jamesstewart oma stoelfamily</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title></title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21376174/"/>\r
+               <id>tag:flickr.com,2004:/photo/21376174</id>\r
+               <issued>2005-06-25T02:00:35Z</issued>\r
+               <modified>2005-06-25T02:00:35Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21376174/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos17.flickr.com/21376174_4314fd8d5c_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+&lt;p&gt;AMA Motocross Championship 2005, Budds Creek, Maryland&lt;/p&gt;</content>\r
+               <author>\r
+                       <name>Lan Rover</name>\r
+                       <url>http://www.flickr.com/people/buddscreek/</url>\r
+               </author>\r
+                               <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational rickycarmichael 259 jamesstewart 4</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title></title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21375650/"/>\r
+               <id>tag:flickr.com,2004:/photo/21375650</id>\r
+               <issued>2005-06-25T01:56:24Z</issued>\r
+               <modified>2005-06-25T01:56:24Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21375650/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos16.flickr.com/21375650_5c60e0dab1_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+</content>\r
+               <author>\r
+                       <name>Lan Rover</name>\r
+                       <url>http://www.flickr.com/people/buddscreek/</url>\r
+               </author>\r
+                               <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational 259 jamesstewart</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title></title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21375345/"/>\r
+               <id>tag:flickr.com,2004:/photo/21375345</id>\r
+               <issued>2005-06-25T01:54:11Z</issued>\r
+               <modified>2005-06-25T01:54:11Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21375345/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos15.flickr.com/21375345_4205fdd22b_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+</content>\r
+               <author>\r
+                       <name>Lan Rover</name>\r
+                       <url>http://www.flickr.com/people/buddscreek/</url>\r
+               </author>\r
+                               <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational 259 jamesstewart</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title>Lunch with Kari &amp; James, café in the crypt of St Martin in the fields</title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/16516618/"/>\r
+               <id>tag:flickr.com,2004:/photo/16516618</id>\r
+               <issued>2005-05-30T21:56:39Z</issued>\r
+               <modified>2005-05-30T21:56:39Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/16516618/&quot; title=&quot;Lunch with Kari &amp;amp; James, café in the crypt of St Martin in the fields&quot;&gt;&lt;img src=&quot;http://photos14.flickr.com/16516618_afaa4a395e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Lunch with Kari &amp;amp; James, café in the crypt of St Martin in the fields&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+</content>\r
+               <author>\r
+                       <name>fidothe</name>\r
+                       <url>http://www.flickr.com/people/fidothe/</url>\r
+               </author>\r
+                               <dc:subject>nokia7610 london stmartininthefields clarepatterson jamesstewart parvinstewart jimstewart susanstewart</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title>Stewart keeping it low over the obstacle.</title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/pqbon/10224728/"/>\r
+               <id>tag:flickr.com,2004:/photo/10224728</id>\r
+               <issued>2005-04-21T07:30:29Z</issued>\r
+               <modified>2005-04-21T07:30:29Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/pqbon/&quot;&gt;pqbon&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/pqbon/10224728/&quot; title=&quot;Stewart keeping it low over the obstacle.&quot;&gt;&lt;img src=&quot;http://photos7.flickr.com/10224728_b756341957_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Stewart keeping it low over the obstacle.&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+</content>\r
+               <author>\r
+                       <name>pqbon</name>\r
+                       <url>http://www.flickr.com/people/pqbon/</url>\r
+               </author>\r
+                               <dc:subject>ama hangtown motocross jamesstewart bubba</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title>king james stewart</title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/jjlook/7152910/"/>\r
+               <id>tag:flickr.com,2004:/photo/7152910</id>\r
+               <issued>2005-03-22T21:53:37Z</issued>\r
+               <modified>2005-03-22T21:53:37Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/jjlook/&quot;&gt;jj look&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/jjlook/7152910/&quot; title=&quot;king james stewart&quot;&gt;&lt;img src=&quot;http://photos7.flickr.com/7152910_a02ab5a750_m.jpg&quot; width=&quot;180&quot; height=&quot;240&quot; alt=&quot;king james stewart&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+&lt;p&gt;11th&lt;/p&gt;</content>\r
+               <author>\r
+                       <name>jj look</name>\r
+                       <url>http://www.flickr.com/people/jjlook/</url>\r
+               </author>\r
+                               <dc:subject>dilomar05 eastside austin texas 78702 kingjames stewart jamesstewart borrowed</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title>It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)</title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586562/"/>\r
+               <id>tag:flickr.com,2004:/photo/1586562</id>\r
+               <issued>2004-11-20T09:34:28Z</issued>\r
+               <modified>2004-11-20T09:34:28Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586562/&quot; title=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586562_0bc5313a3e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+</content>\r
+               <author>\r
+                       <name>fidothe</name>\r
+                       <url>http://www.flickr.com/people/fidothe/</url>\r
+               </author>\r
+                               <dc:subject>holiday grandrapids jamesstewart</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title>It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)</title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586539/"/>\r
+               <id>tag:flickr.com,2004:/photo/1586539</id>\r
+               <issued>2004-11-20T09:28:16Z</issued>\r
+               <modified>2004-11-20T09:28:16Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586539/&quot; title=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586539_c51e5f2e7a_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+</content>\r
+               <author>\r
+                       <name>fidothe</name>\r
+                       <url>http://www.flickr.com/people/fidothe/</url>\r
+               </author>\r
+                               <dc:subject>holiday grandrapids jamesstewart</dc:subject>\r
+       </entry>\r
+       <entry>\r
+               <title>It's a Grind, James and Jim can't decide)</title>\r
+               <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586514/"/>\r
+               <id>tag:flickr.com,2004:/photo/1586514</id>\r
+               <issued>2004-11-20T09:25:05Z</issued>\r
+               <modified>2004-11-20T09:25:05Z</modified>\r
+               <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;\r
+\r
+&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586514/&quot; title=&quot;It's a Grind, James and Jim can't decide)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586514_733c2dfa3e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, James and Jim can't decide)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;\r
+\r
+</content>\r
+               <author>\r
+                       <name>fidothe</name>\r
+                       <url>http://www.flickr.com/people/fidothe/</url>\r
+               </author>\r
+                               <dc:subject>holiday grandrapids jamesstewart johnkentish</dc:subject>\r
+       </entry>\r
+\r
+</feed>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml b/plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml
new file mode 100755 (executable)
index 0000000..c351d3c
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="iso-8859-1"?>\r<feed xmlns="http://www.w3.org/2005/Atom"\r xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">\r<title>Updates to Grand Rapids WiFi hotspot details</title>\r<link rel="alternate" type="text/html" href="http://grwifi.net/"/>\r<link rel="self" type="application/atom+xml" href="http://grwifi.net/atom/locations"/>\r<updated>2005-09-01T15:43:01-05:00</updated>\r<subtitle>WiFi Hotspots in Grand Rapids, MI</subtitle>\r<id>http://grwifi.net/atom/locations</id>\r<rights>Creative Commons Attribution-NonCommercial-ShareAlike 2.0 http://creativecommons.org/licenses/by-nc-sa/2.0/ </rights>\r\r\r<entry>\r    <title>Hotspot Details Updated: Sweetwaters</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/sweetwaters"/>\r    <id>http://grwifi.net/location/sweetwaters</id>\r    <updated>2005-09-01T15:43:01-05:00</updated>\r\r        <summary type="html">\r          The details of the WiFi hotspot at: Sweetwaters have been updated. Find out more at:
+http://grwifi.net/location/sweetwaters\r        </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Common Ground Coffee Shop</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/common-ground"/>\r    <id>http://grwifi.net/location/common-ground</id>\r    <updated>2005-09-01T15:42:39-05:00</updated>\r\r     <summary type="html">\r          The details of the WiFi hotspot at: Common Ground Coffee Shop have been updated. Find out more at:
+http://grwifi.net/location/common-ground\r      </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Grand Rapids Public Library, Main Branch</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/grpl-main-branch"/>\r    <id>http://grwifi.net/location/grpl-main-branch</id>\r    <updated>2005-09-01T15:42:20-05:00</updated>\r\r        <summary type="html">\r          The details of the WiFi hotspot at: Grand Rapids Public Library, Main Branch have been updated. Find out more at:
+http://grwifi.net/location/grpl-main-branch\r   </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Four Friends Coffee House</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/four-friends"/>\r    <id>http://grwifi.net/location/four-friends</id>\r    <updated>2005-09-01T15:41:35-05:00</updated>\r\r       <summary type="html">\r          The details of the WiFi hotspot at: Four Friends Coffee House have been updated. Find out more at:
+http://grwifi.net/location/four-friends\r       </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: Barnes and Noble, Rivertown Crossings</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/barnes-noble-rivertown"/>\r    <id>http://grwifi.net/location/barnes-noble-rivertown</id>\r    <updated>2005-09-01T15:40:41-05:00</updated>\r\r       <summary type="html">\r          The details of the WiFi hotspot at: Barnes and Noble, Rivertown Crossings have been updated. Find out more at:
+http://grwifi.net/location/barnes-noble-rivertown\r     </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r\r<entry>\r    <title>Hotspot Details Updated: The Boss Sports Bar &amp; Grille</title>\r    <link rel="alternate" type="text/html" href="http://grwifi.net/location/boss-sports-bar"/>\r    <id>http://grwifi.net/location/boss-sports-bar</id>\r    <updated>2005-09-01T15:40:19-05:00</updated>\r\r  <summary type="html">\r          The details of the WiFi hotspot at: The Boss Sports Bar &amp; Grille have been updated. Find out more at:
+http://grwifi.net/location/boss-sports-bar\r    </summary>\r\r    <author>\r               <name>James</name>\r             <uri>http://jystewart.net</uri>\r                <email>james@jystewart.net</email>      </author>\r      <dc:subject>wifi hotspot</dc:subject>\r</entry>\r</feed>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/hoder.xml b/plugins/OStatus/extlib/XML/Feed/samples/hoder.xml
new file mode 100755 (executable)
index 0000000..0994635
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" 
+  xmlns:dc="http://purl.org/dc/elements/1.1/"
+  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+  xmlns:admin="http://webns.net/mvcb/"
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+
+<channel>
+<title>Editor: Myself (Persian)</title>
+<link>http://editormyself.info</link>
+<description>This is a Persian (Farsi) weblog, written by Hossein Derakhshan (aka, Hoder), an Iranian Multimedia designer and a journalist who lives in Toronto since Dec 2000. He also keeps an English weblog with the same name.</description>
+<dc:language>en-us</dc:language>
+<dc:creator>hoder@hotmail.com</dc:creator>
+<dc:date>2005-10-12T19:45:32-05:00</dc:date>
+<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.15" />
+<sy:updatePeriod>hourly</sy:updatePeriod>
+<sy:updateFrequency>1</sy:updateFrequency>
+<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
+
+
+<item>
+<title>لينکدونی‌ | جلسه‌ی امریکن انترپرایز برای تقسیم قومی ایران</title>
+<link>http://www.aei.org/events/type.upcoming,eventID.1166,filter.all/event_detail.asp</link>
+<description>چطور بعضی‌ها فکر می‌کنند دست راستی‌های آمریکا از خامنه‌ای ملی‌گراترند</description>
+<guid isPermaLink="false">14645@http://i.hoder.com/</guid>
+<dc:subject>iran</dc:subject>
+<dc:date>2005-10-12T19:45:32-05:00</dc:date>
+</item>
+
+<item>
+<title>لينکدونی‌ | به صبحانه آگهی بدهید</title>
+<link>http://www.adbrite.com/mb/commerce/purchase_form.php?opid=24346&amp;afsid=1</link>
+<description>خیلی ارزان و راحت است</description>
+<guid isPermaLink="false">14644@http://i.hoder.com/</guid>
+<dc:subject>media/journalism</dc:subject>
+<dc:date>2005-10-12T17:23:15-05:00</dc:date>
+</item>
+
+<item>
+<title>لينکدونی‌ | نیروی انتظامی چگونه تابوهای هم‌جنس‌گرایانه را می‌شکند؛ فرنگوپولیس</title>
+<link>http://farangeopolis.blogspot.com/2005/10/blog-post_08.html</link>
+<description>از پس و پیش و حاشیه‌ی این ماجرا می‌توان یک مستند بی‌نظیر ساخت</description>
+<guid isPermaLink="false">14643@http://i.hoder.com/</guid>
+<dc:subject>soc_popculture</dc:subject>
+<dc:date>2005-10-12T17:06:40-05:00</dc:date>
+</item>
+
+<item>
+<title>لينکدونی‌ | بازتاب توقیف شد</title>
+<link>http://www.baztab.com/news/30201.php</link>
+<description>اگر گفتید یک وب‌سایت را چطور توقیف می‌کنند؟ لابد ماوس‌شان را قایم می‌کنند.</description>
+<guid isPermaLink="false">14642@http://i.hoder.com/</guid>
+<dc:subject>media/journalism</dc:subject>
+<dc:date>2005-10-12T14:41:57-05:00</dc:date>
+</item>
+
+<item>
+<title>لينکدونی‌ | رشد وب در سال 2005 از همیشه بیشتر بوده است&quot; بی.بی.سی</title>
+<link>http://news.bbc.co.uk/2/hi/technology/4325918.stm</link>
+<description></description>
+<guid isPermaLink="false">14640@http://i.hoder.com/</guid>
+<dc:subject>tech</dc:subject>
+<dc:date>2005-10-12T13:04:46-05:00</dc:date>
+</item>
+
+
+
+<item>
+<title>==قرعه کشی گرین کارد به زودی شروع می‌شود==</title>
+<link>http://nice.newsxphotos.biz/05/09/2007_dv_lottery_registration_to_begin_oct_5_14589.php</link>
+<description></description>
+<guid isPermaLink="false">14613@http://vagrantly.com</guid>
+<dc:subject>ads03</dc:subject>
+<dc:date>2005-09-27T04:49:22-05:00</dc:date>
+</item>
+
+
+
+
+
+
+<item>
+<title>پروژه‌ی هاروارد، قدم دوم</title>
+<link>http://editormyself.info/archives/2005/10/051012_014641.shtml</link>
+<description><![CDATA[<p>اگر یادتان باشد <a href="/archives/2005/09/050906_014504.shtml">چند وقت پیش نوشتم</a> که دانشگاه هاروارد پروژه‌ای دارد با نام آواهای جهانی که در آن به وبلاگ‌های غیر انگلیسی‌زبان می‌پردازد. خواشتم که اگر کسی علاقه دارد ایمیل بزند. تعداد زیادی جواب دادند و ابراز علاقه کردند. حالا وقت قدم دوم است.</p>
+
+<p>قدم دوم این است که برای اینکه مسوولین پروژه بتوانند تصمیم بگیرند که با چه کسی کار کنند، می‌خواهند نمونه‌ی کارهای علاقمندان مشارکت در این پرزو‌ه را ببینند.</p>
+
+<p>برای همین از همه‌ی علاقماندان، حتی کسانی که قبلا اعلام آمادگی نکرده بودند، می‌‌خواهم که یک موضوع رایج این روزهای وبلاگستان فارسی را انتخاب کنند و در هفتصد کلمه، به انگلیسی، بنویسند که وبلاگ‌دارهای درباره‌اش چه می‌گویند. لینک به پنج، شش وبلاگ و بازنویسی آنچه آنها از جنبه‌های گوناگون درباره‌ی آن موضوع نوشته‌اند با نقل قول مستقیم از آنها (البته ترجمه شده از فارسی) کافی است. دو سه جمله هم اول کار توضیح دهید که چرا این موضوع مهم است.</p>
+
+<p>متن نمونه را به آدرس ایمیل من hoder@hoder.com و نیز برای افراد زیر تا روز دوشنبه بفرستید:<br />
+ربکا : rmackinnon@cyber.law.harvard.edu<br />
+هیثم: haitham.sabbah@gmail.com</p>]]></description>
+<guid isPermaLink="false">14641@http://editormyself.info</guid>
+<dc:subject>weblog</dc:subject>
+<dc:date>2005-10-12T14:04:23-05:00</dc:date>
+</item>
+
+
+
+</channel>
+</rss>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml b/plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml
new file mode 100755 (executable)
index 0000000..6121868
--- /dev/null
@@ -0,0 +1,13 @@
+<!--\r
+Description: entry author name\r
+Expect:      bozo and entries[0]['author_detail']['name'] == u'Example author'\r
+-->\r
+<feed xmlns="http://www.w3.org/2005/Atom">\r
+<entry>\r
+  <author>\r
+    <name>Example author</name>\r
+    <email>me@example.com</email>\r
+    <uri>http://example.com/</uri>\r
+  </author>\r
+</entry>\r
+</feed
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml
new file mode 100755 (executable)
index 0000000..b0a1fee
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
+<rss version="0.91">
+<channel>
+<copyright>Copyright 1997-1999 UserLand Software, Inc.</copyright>
+<pubDate>Thu, 08 Jul 1999 07:00:00 GMT</pubDate>
+<lastBuildDate>Thu, 08 Jul 1999 16:20:26 GMT</lastBuildDate>
+<docs>http://my.userland.com/stories/storyReader$11</docs>
+<description>News and commentary from the cross-platform scripting community.</description>
+<link>http://www.scripting.com/</link>
+<title>Scripting News</title>
+<image>
+<link>http://www.scripting.com/</link>
+<title>Scripting News</title>
+<url>http://www.scripting.com/gifs/tinyScriptingNews.gif</url>
+<height>40</height>
+<width>78</width>
+<description>What is this used for?</description>
+</image>
+<managingEditor>dave@userland.com (Dave Winer)</managingEditor>
+<webMaster>dave@userland.com (Dave Winer)</webMaster>
+<language>en-us</language>
+<skipHours>
+<hour>6</hour>
+<hour>7</hour>
+<hour>8</hour>
+<hour>9</hour>
+<hour>10</hour>
+<hour>11</hour>
+</skipHours>
+<skipDays>
+<day>Sunday</day>
+</skipDays>
+<rating>(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))</rating>
+<item>
+<title>stuff</title>
+<link>http://bar</link>
+<description>This is an article about some stuff</description>
+</item>
+<textinput>
+<title>Search Now!</title>
+<description>Enter your search &lt;terms&gt;</description>
+<name>find</name>
+<link>http://my.site.com/search.cgi</link>
+</textinput>
+</channel>
+</rss>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml
new file mode 100755 (executable)
index 0000000..cfe9169
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="EuC-JP"?>  
+<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
+<rss version="0.91">
+<channel>
+<title>膮ŸÛë´é´Ì´×´è´ŒÁ¹´Õ</title>
+<link>http://www.mozilla.org</link>
+<description>膮ŸÛë´é´Ì´×´è´ŒÁ¹´Õ</description>
+<language>ja</language>  <!-- tagged as Japanese content -->
+<item>
+<title>NYÒ™Á¢¸»ÌêÛì15285.25´ƒ´‘Á£´Û´—´ÀÁ¹´ê´Ì´éÒ™Ûì¡êçÒÕ‰ÌêÁ£</title>
+<link>http://www.mozilla.org/status/</link>
+<description>This is an item description...</description>
+</item>
+<item>
+<title>‚§±Çç¡ËßÛÂÒ\8féøÓ¸Á£Ë²®Ÿè†Ûèå\8d±ÇÌ’¡Íæ—éøë‡Á£</title>
+<link>http://www.mozilla.org/status/</link>
+<description>This is an item description...</description>
+</item>
+<item>
+<title>ËÜË”\81ïÌëÈšÁ¢È†Ë§æàÀ豎ˉۂÁ¢Ë‚åܼšÛ˜íËüËÁ£</title>
+<link>http://www.mozilla.org/status/</link>
+<description>This is an item description...</description>
+</item>
+<item>
+<title>2000‚øíŠå\90Á¢«‘¦éÛë¹\8fÛ\90çéÛ§ÛÂè†ÒæÓ¸Á£Ì¾«…æ—ÕÝéøƒ¸Á£</title>
+<link>http://www.mozilla.org/status/</link>
+<description>This is an item description...</description>
+</item>
+</channel>
+</rss>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml
new file mode 100755 (executable)
index 0000000..f0964a2
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
+<rss version="0.91">
+<channel>
+<language>en</language>
+<description>News and commentary from the cross-platform scripting community.</description>
+<link>http://www.scripting.com/</link>
+<title>Scripting News</title>
+<image>
+<link>http://www.scripting.com/</link>
+<title>Scripting News</title>
+<url>http://www.scripting.com/gifs/tinyScriptingNews.gif</url>
+</image>
+</channel>
+</rss>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml
new file mode 100755 (executable)
index 0000000..5d75c35
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0"?>
+<!-- RSS generation done by 'Radio UserLand' on Fri, 13 Apr 2001 19:23:02 GMT -->
+<rss version="0.92">
+       <channel>
+               <title>Dave Winer: Grateful Dead</title>
+               <link>http://www.scripting.com/blog/categories/gratefulDead.html</link>
+               <description>A high-fidelity Grateful Dead song every day. This is where we&apos;re experimenting with enclosures on RSS news items that download when you&apos;re not using your computer. If it works (it will) it will be the end of the Click-And-Wait multimedia experience on the Internet. </description>
+               <lastBuildDate>Fri, 13 Apr 2001 19:23:02 GMT</lastBuildDate>
+               <docs>http://backend.userland.com/rss092</docs>
+               <managingEditor>dave@userland.com (Dave Winer)</managingEditor>
+               <webMaster>dave@userland.com (Dave Winer)</webMaster>
+               <cloud domain="data.ourfavoritesongs.com" port="80" path="/RPC2" registerProcedure="ourFavoriteSongs.rssPleaseNotify" protocol="xml-rpc"/>
+               <item>
+                       <description>It&apos;s been a few days since I added a song to the Grateful Dead channel. Now that there are all these new Radio users, many of whom are tuned into this channel (it&apos;s #16 on the hotlist of upstreaming Radio users, there&apos;s no way of knowing how many non-upstreaming users are subscribing, have to do something about this..). Anyway, tonight&apos;s song is a live version of Weather Report Suite from Dick&apos;s Picks Volume 7. It&apos;s wistful music. Of course a beautiful song, oft-quoted here on Scripting News. &lt;i&gt;A little change, the wind and rain.&lt;/i&gt;
+</description>
+                       <enclosure url="http://www.scripting.com/mp3s/weatherReportDicksPicsVol7.mp3" length="6182912" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>Kevin Drennan started a &lt;a href=&quot;http://deadend.editthispage.com/&quot;&gt;Grateful Dead Weblog&lt;/a&gt;. Hey it&apos;s cool, he even has a &lt;a href=&quot;http://deadend.editthispage.com/directory/61&quot;&gt;directory&lt;/a&gt;. &lt;i&gt;A Frontier 7 feature.&lt;/i&gt;</description>
+                       <source url="http://scriptingnews.userland.com/xml/scriptingNews2.xml">Scripting News</source>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/other1.html&quot;&gt;The Other One&lt;/a&gt;, live instrumental, One From The Vault. Very rhythmic very spacy, you can listen to it many times, and enjoy something new every time.</description>
+                       <enclosure url="http://www.scripting.com/mp3s/theOtherOne.mp3" length="6666097" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>This is a test of a change I just made. Still diggin..</description>
+                       </item>
+               <item>
+                       <description>The HTML rendering almost &lt;a href=&quot;http://validator.w3.org/check/referer&quot;&gt;validates&lt;/a&gt;. Close. Hey I wonder if anyone has ever published a style guide for ALT attributes on images? What are you supposed to say in the ALT attribute? I sure don&apos;t know. If you&apos;re blind send me an email if u cn rd ths. </description>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/Franklin&apos;s_Tower.txt&quot;&gt;Franklin&apos;s Tower&lt;/a&gt;, a live version from One From The Vault.</description>
+                       <enclosure url="http://www.scripting.com/mp3s/franklinsTower.mp3" length="6701402" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>Moshe Weitzman says Shakedown Street is what I&apos;m lookin for for tonight. I&apos;m listening right now. It&apos;s one of my favorites. &quot;Don&apos;t tell me this town ain&apos;t got no heart.&quot; Too bright. I like the jazziness of Weather Report Suite. Dreamy and soft. How about The Other One? &quot;Spanish lady come to me..&quot;</description>
+                       <source url="http://scriptingnews.userland.com/xml/scriptingNews2.xml">Scripting News</source>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://www.scripting.com/mp3s/youWinAgain.mp3&quot;&gt;The news is out&lt;/a&gt;, all over town..&lt;p&gt;
+You&apos;ve been seen, out runnin round. &lt;p&gt;
+The lyrics are &lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/You_Win_Again.txt&quot;&gt;here&lt;/a&gt;, short and sweet. &lt;p&gt;
+&lt;i&gt;You win again!&lt;/i&gt;
+</description>
+                       <enclosure url="http://www.scripting.com/mp3s/youWinAgain.mp3" length="3874816" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://www.getlyrics.com/lyrics/grateful-dead/wake-of-the-flood/07.htm&quot;&gt;Weather Report Suite&lt;/a&gt;: &quot;Winter rain, now tell me why, summers fade, and roses die? The answer came. The wind and rain. Golden hills, now veiled in grey, summer leaves have blown away. Now what remains? The wind and rain.&quot;</description>
+                       <enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://arts.ucsc.edu/gdead/agdl/darkstar.html&quot;&gt;Dark Star&lt;/a&gt; crashes, pouring its light into ashes.</description>
+                       <enclosure url="http://www.scripting.com/mp3s/darkStar.mp3" length="10889216" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>DaveNet: &lt;a href=&quot;http://davenet.userland.com/2001/01/21/theUsBlues&quot;&gt;The U.S. Blues&lt;/a&gt;.</description>
+                       </item>
+               <item>
+                       <description>Still listening to the US Blues. &lt;i&gt;&quot;Wave that flag, wave it wide and high..&quot;&lt;/i&gt; Mistake made in the 60s. We gave our country to the assholes. Ah ah. Let&apos;s take it back. Hey I&apos;m still a hippie. &lt;i&gt;&quot;You could call this song The United States Blues.&quot;&lt;/i&gt;</description>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://www.sixties.com/html/garcia_stack_0.html&quot;&gt;&lt;img src=&quot;http://www.scripting.com/images/captainTripsSmall.gif&quot; height=&quot;51&quot; width=&quot;42&quot; border=&quot;0&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; align=&quot;right&quot;&gt;&lt;/a&gt;In celebration of today&apos;s inauguration, after hearing all those great patriotic songs, America the Beautiful, even The Star Spangled Banner made my eyes mist up. It made my choice of Grateful Dead song of the night realllly easy. Here are the &lt;a href=&quot;http://searchlyrics2.homestead.com/gd_usblues.html&quot;&gt;lyrics&lt;/a&gt;. Click on the audio icon to the left to give it a listen. &quot;Red and white, blue suede shoes, I&apos;m Uncle Sam, how do you do?&quot; It&apos;s a different kind of patriotic music, but man I love my country and I love Jerry and the band. &lt;i&gt;I truly do!&lt;/i&gt;</description>
+                       <enclosure url="http://www.scripting.com/mp3s/usBlues.mp3" length="5272510" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>Grateful Dead: &quot;Tennessee, Tennessee, ain&apos;t no place I&apos;d rather be.&quot;</description>
+                       <enclosure url="http://www.scripting.com/mp3s/tennesseeJed.mp3" length="3442648" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>Ed Cone: &quot;Had a nice Deadhead experience with my wife, who never was one but gets the vibe and knows and likes a lot of the music. Somehow she made it to the age of 40 without ever hearing Wharf Rat. We drove to Jersey and back over Christmas with the live album commonly known as Skull and Roses in the CD player much of the way, and it was cool to see her discover one the band&apos;s finest moments. That song is unique and underappreciated. Fun to hear that disc again after a few years off -- you get Jerry as blues-guitar hero on Big Railroad Blues and a nice version of Bertha.&quot;</description>
+                       <enclosure url="http://www.scripting.com/mp3s/darkStarWharfRat.mp3" length="27503386" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/fotd.html&quot;&gt;Tonight&apos;s Song&lt;/a&gt;: &quot;If I get home before daylight I just might get some sleep tonight.&quot; </description>
+                       <enclosure url="http://www.scripting.com/mp3s/friendOfTheDevil.mp3" length="3219742" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/uncle.html&quot;&gt;Tonight&apos;s song&lt;/a&gt;: &quot;Come hear Uncle John&apos;s Band by the river side. Got some things to talk about here beside the rising tide.&quot;</description>
+                       <enclosure url="http://www.scripting.com/mp3s/uncleJohnsBand.mp3" length="4587102" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/Me_and_My_Uncle.txt&quot;&gt;Me and My Uncle&lt;/a&gt;: &quot;I loved my uncle, God rest his soul, taught me good, Lord, taught me all I know. Taught me so well, I grabbed that gold and I left his dead ass there by the side of the road.&quot;
+</description>
+                       <enclosure url="http://www.scripting.com/mp3s/meAndMyUncle.mp3" length="2949248" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>Truckin, like the doo-dah man, once told me gotta play your hand. Sometimes the cards ain&apos;t worth a dime, if you don&apos;t lay em down.</description>
+                       <enclosure url="http://www.scripting.com/mp3s/truckin.mp3" length="4847908" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>Two-Way-Web: &lt;a href=&quot;http://www.thetwowayweb.com/payloadsForRss&quot;&gt;Payloads for RSS&lt;/a&gt;. &quot;When I started talking with Adam late last year, he wanted me to think about high quality video on the Internet, and I totally didn&apos;t want to hear about it.&quot;</description>
+                       </item>
+               <item>
+                       <description>A touch of gray, kinda suits you anyway..</description>
+                       <enclosure url="http://www.scripting.com/mp3s/touchOfGrey.mp3" length="5588242" type="audio/mpeg"/>
+                       </item>
+               <item>
+                       <description>&lt;a href=&quot;http://www.sixties.com/html/garcia_stack_0.html&quot;&gt;&lt;img src=&quot;http://www.scripting.com/images/captainTripsSmall.gif&quot; height=&quot;51&quot; width=&quot;42&quot; border=&quot;0&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; align=&quot;right&quot;&gt;&lt;/a&gt;In celebration of today&apos;s inauguration, after hearing all those great patriotic songs, America the Beautiful, even The Star Spangled Banner made my eyes mist up. It made my choice of Grateful Dead song of the night realllly easy. Here are the &lt;a href=&quot;http://searchlyrics2.homestead.com/gd_usblues.html&quot;&gt;lyrics&lt;/a&gt;. Click on the audio icon to the left to give it a listen. &quot;Red and white, blue suede shoes, I&apos;m Uncle Sam, how do you do?&quot; It&apos;s a different kind of patriotic music, but man I love my country and I love Jerry and the band. &lt;i&gt;I truly do!&lt;/i&gt;</description>
+                       <enclosure url="http://www.scripting.com/mp3s/usBlues.mp3" length="5272510" type="audio/mpeg"/>
+                       </item>
+               </channel>
+       </rss>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml
new file mode 100755 (executable)
index 0000000..0edecf5
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+
+<rdf:RDF 
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns="http://purl.org/rss/1.0/"
+>
+
+  <channel rdf:about="http://www.xml.com/xml/news.rss">
+    <title>XML.com</title>
+    <link>http://xml.com/pub</link>
+    <description>
+      XML.com features a rich mix of information and services 
+      for the XML community.
+    </description>
+
+    <image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />
+
+    <items>
+      <rdf:Seq>
+        <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />
+        <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />
+      </rdf:Seq>
+    </items>
+
+    <textinput rdf:resource="http://search.xml.com" />
+
+  </channel>
+  
+  <image rdf:about="http://xml.com/universal/images/xml_tiny.gif">
+    <title>XML.com</title>
+    <link>http://www.xml.com</link>
+    <url>http://xml.com/universal/images/xml_tiny.gif</url>
+  </image>
+  
+  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
+    <title>Processing Inclusions with XSLT</title>
+    <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
+    <description>
+     Processing document inclusions with general XML tools can be 
+     problematic. This article proposes a way of preserving inclusion 
+     information through SAX-based processing.
+    </description>
+  </item>
+  
+  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">
+    <title>Putting RDF to Work</title>
+    <link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>
+    <description>
+     Tool and API support for the Resource Description Framework 
+     is slowly coming of age. Edd Dumbill takes a look at RDFDB, 
+     one of the most exciting new RDF toolkits.
+    </description>
+  </item>
+
+  <textinput rdf:about="http://search.xml.com">
+    <title>Search XML.com</title>
+    <description>Search XML.com's XML collection</description>
+    <name>s</name>
+    <link>http://search.xml.com</link>
+  </textinput>
+
+</rdf:RDF>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml
new file mode 100755 (executable)
index 0000000..26235f7
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?> 
+
+<rdf:RDF 
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
+  xmlns:dc="http://purl.org/dc/elements/1.1/"
+  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+  xmlns:co="http://purl.org/rss/1.0/modules/company/"
+  xmlns:ti="http://purl.org/rss/1.0/modules/textinput/"
+  xmlns="http://purl.org/rss/1.0/"
+> 
+
+  <channel rdf:about="http://meerkat.oreillynet.com/?_fl=rss1.0">
+    <title>Meerkat</title>
+    <link>http://meerkat.oreillynet.com</link>
+    <description>Meerkat: An Open Wire Service</description>
+    <dc:publisher>The O'Reilly Network</dc:publisher>
+    <dc:creator>Rael Dornfest (mailto:rael@oreilly.com)</dc:creator>
+    <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, Inc.</dc:rights>
+    <dc:date>2000-01-01T12:00+00:00</dc:date>
+    <sy:updatePeriod>hourly</sy:updatePeriod>
+    <sy:updateFrequency>2</sy:updateFrequency>
+    <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
+
+    <image rdf:resource="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg" />
+
+    <items>
+      <rdf:Seq>
+        <rdf:li resource="http://c.moreover.com/click/here.pl?r123" />
+      </rdf:Seq>
+    </items>
+
+    <textinput rdf:resource="http://meerkat.oreillynet.com" />
+
+  </channel>
+
+  <image rdf:about="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg">
+    <title>Meerkat Powered!</title>
+    <url>http://meerkat.oreillynet.com/icons/meerkat-powered.jpg</url>
+    <link>http://meerkat.oreillynet.com</link>
+  </image>
+
+  <item rdf:about="http://c.moreover.com/click/here.pl?r123">
+    <title>XML: A Disruptive Technology</title> 
+    <link>http://c.moreover.com/click/here.pl?r123</link>
+    <dc:description>
+      XML is placing increasingly heavy loads on the existing technical
+      infrastructure of the Internet.
+    </dc:description>
+    <dc:publisher>The O'Reilly Network</dc:publisher>
+    <dc:creator>Simon St.Laurent (mailto:simonstl@simonstl.com)</dc:creator>
+    <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, Inc.</dc:rights>
+    <dc:subject>XML</dc:subject>
+    <co:name>XML.com</co:name>
+    <co:market>NASDAQ</co:market>
+    <co:symbol>XML</co:symbol>
+  </item> 
+
+  <textinput rdf:about="http://meerkat.oreillynet.com">
+    <title>Search Meerkat</title>
+    <description>Search Meerkat's RSS Database...</description>
+    <name>s</name>
+    <link>http://meerkat.oreillynet.com/</link>
+    <ti:function>search</ti:function>
+    <ti:inputType>regex</ti:inputType>
+  </textinput>
+
+</rdf:RDF>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml
new file mode 100755 (executable)
index 0000000..53483cc
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>\r
+<rss version="2.0" xmlns:content="http://purl.org/rss/1.0.modules/content/">\r
+   <channel>\r
+      <title>Liftoff News</title>\r
+      <link>http://liftoff.msfc.nasa.gov/</link>\r
+      <description>Liftoff to Space Exploration.</description>\r
+      <language>en-us</language>\r
+      <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>\r
+      <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>\r
+      <docs>http://blogs.law.harvard.edu/tech/rss</docs>\r
+      <generator>Weblog Editor 2.0</generator>\r
+      <managingEditor>editor@example.com</managingEditor>\r
+      <webMaster>webmaster@example.com</webMaster>\r
+      <item>\r
+         <title>Star City</title>\r
+         <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>\r
+         <description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's &lt;a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm"&gt;Star City&lt;/a&gt;.</description>\r
+         <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>\r
+         <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>\r
+      </item>\r
+      <item>\r
+         <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a &lt;a href="http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm"&gt;partial eclipse of the Sun&lt;/a&gt; on Saturday, May 31st.</description>\r
+         <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>\r
+         <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>\r
+      </item>\r
+      <item>\r
+         <title>The Engine That Does More</title>\r
+         <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>\r
+         <description>Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly.  The proposed VASIMR engine would do that.</description>\r
+         <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>\r
+         <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>\r
+                <content:encoded><![CDATA[<p>Test content</p>]]></content:encoded>\r
+      </item>\r
+      <item>\r
+         <title>Astronauts' Dirty Laundry</title>\r
+         <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>\r
+         <description>Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them.  Instead, astronauts have other options.</description>\r
+         <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>\r
+         <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>\r
+      </item>\r
+   </channel>\r
+</rss>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml b/plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml
new file mode 100755 (executable)
index 0000000..f8a04bb
--- /dev/null
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0">
+<channel>
+<title>Six Apart - News</title>
+<link>http://www.sixapart.jp/</link>
+<description></description>
+<language>ja</language>
+<copyright>Copyright 2005</copyright>
+<lastBuildDate>Fri, 07 Oct 2005 19:09:34 +0900</lastBuildDate>
+<generator>http://www.movabletype.org/?v=3.2-ja</generator>
+<docs>http://blogs.law.harvard.edu/tech/rss</docs> 
+
+<item>
+<title>ファイブ・ディーが、Movable Typeでブログプロモーションをスタート</title>
+<description><![CDATA[<p><img alt="MIYAZAWAblog_banner.jpg" src="http://www.sixapart.jp/MIYAZAWAblog_banner.jpg" width="200" height="88" align="right" /><br />
+ファイブ・ディーは、Movable Typeで構築したプロモーション ブログ『宮沢和史 中南米ツアーblog Latin America 2005』を開設しました。</p>
+
+<p>9月21日に開設されたこのブログは、ブラジル、ホンジュラス、ニカラグア、メキシコ、キューバの5か国を巡る「Latin America 2005」ツアーに合わせ、そのツアーの模様を同行マネージャーがレポートしていきます。<br />
+さらに今月2日からは宮沢和史自身が日々録音した声をPodcastingするという点でも、ブログを使ったユニークなプロモーションとなっています。</p>
+
+<p><a href="http://www.five-d.co.jp/miyazawa/jp/blog/la2005/">「宮沢和史 中南米ツアーblog Latin America 2005」</a></p>
+
+<p>※シックス・アパートではこうしたブログを使ったプロモーションに最適な製品をご用意しております。<br />
+<ul><li><a href="/movabletype/">Movable Type</a><br />
+<li><a href="/typepad/typepad_promotion.html">TypePad Promotion</a><br />
+</ul></p>]]></description>
+<link>http://www.sixapart.jp/news/2005/10/07-1909.html</link>
+<guid>http://www.sixapart.jp/news/2005/10/07-1909.html</guid>
+<category>news</category>
+<pubDate>Fri, 07 Oct 2005 19:09:34 +0900</pubDate>
+</item>
+<item>
+<title>Movable Type 3.2日本語版の提供を開始</title>
+<description><![CDATA[<p><img alt="Movable Type Logo" src="/images/mt3-logo-small.gif" width="151" height="37"/></p>
+<p>シックス・アパートは、Movable Type 3.2日本語版の提供を開始いたしました。<br />
+ベータテストにご協力いただいた多くの皆様に、スタッフ一同、心から感謝いたします。</p>
+<p>製品概要など、詳しくは<a href="http://www.sixapart.jp/press_releases/2005/09/29-1529.html" title="Six Apart - News: シックス・アパートが、スパム対策強化の「Movable Type 3.2 日本語版」を提供開始">プレスリリース</a>をご参照下さい。</p>
+<p>ご購入のご検討は、<a href="http://www.sixapart.jp/movabletype/purchase-mt.html">Movable Typeのご購入</a>からどうぞ。</p>]]></description>
+<link>http://www.sixapart.jp/news/2005/09/29-1530.html</link>
+<guid>http://www.sixapart.jp/news/2005/09/29-1530.html</guid>
+<category>news</category>
+<pubDate>Thu, 29 Sep 2005 15:30:00 +0900</pubDate>
+</item>
+<item>
+<title>シックス・アパートが、スパム対策強化の「Movable Type 3.2 日本語版」を提供開始</title>
+<description><![CDATA[<p><プレスリリース資料></p>
+<ul>
+  <li><a href="http://www.sixapart.jp/sixapart20050929.pdf">印刷用(PDF版)</a></li>
+</ul>
+<p><strong>シックス・アパートが、スパム対策強化の「Movable Type 3.2 日本語版」を提供開始 ~ スパムの自動判別機能や新ユーザー・インターフェースで、運用管理の機能を強化 ~</strong></p>
+<p>2005年9月29日<br />
+シックス・アパート株式会社</p>
+<p>ブログ・ソフトウェア大手のシックス・アパート株式会社(本社:東京都港区、代表取締役:関 信浩)は、「Movable Type(ムーバブル・タイプ) 3.2 日本語版」(URL:<a href="http://www.sixapart.jp/movabletype/">http://www.sixapart.jp/movabletype/</a>)を9月29日より提供開始いたします。</p>]]></description>
+<link>http://www.sixapart.jp/press_releases/2005/09/29-1529.html</link>
+<guid>http://www.sixapart.jp/press_releases/2005/09/29-1529.html</guid>
+<category>Press Releases</category>
+<pubDate>Thu, 29 Sep 2005 15:29:00 +0900</pubDate>
+</item>
+<item>
+<title>スタッフを募集しています</title>
+<description><![CDATA[<p>シックス・アパートはMovable TypeやTypePadの開発エンジニアなど、スタッフを広く募集しています。具体的な募集職種は次の通りです。</p>
+
+<ul>
+<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0007.html">Movable Type開発エンジニア</a></li>
+<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0004.html">TypePad開発エンジニア</a></li>
+<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0003.html">カスタマーサポート・ディレクター</a></li>
+<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0002.html">マーケティング・広報アシスタント</a></li>
+<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0001.html">開発アシスタント</a></li>
+</ul>
+
+<p>拡大を続ける、日本のブログ市場を積極的にリードする人材を、シックス・アパートは募集しています。上記以外の職種につきましても、お気軽にお問い合わせください。詳しい募集要項や応募方法については、<a href="/jobs/">求人情報のページ</a>をご覧ください。<br />
+</p>]]></description>
+<link>http://www.sixapart.jp/news/2005/09/27-0906.html</link>
+<guid>http://www.sixapart.jp/news/2005/09/27-0906.html</guid>
+<category>news</category>
+<pubDate>Tue, 27 Sep 2005 09:06:10 +0900</pubDate>
+</item>
+<item>
+<title>サイト接続不具合に関するお詫びと復旧のお知らせ</title>
+<description><![CDATA[<p>9月24日(土)の14:45ごろから、同日18:30ごろまで、シックス・アパート社のウェブサイトが不安定になっており、断続的に接続できない不具合が発生しておりました。このため、この期間中にウェブサイトの閲覧や製品のダウンロードができませんでした。</p>
+
+<p>なお現在は不具合は解消しております。みなさまにご迷惑をおかけしたことをお詫びいたします。</p>]]></description>
+<link>http://www.sixapart.jp/news/2005/09/26-1000.html</link>
+<guid>http://www.sixapart.jp/news/2005/09/26-1000.html</guid>
+<category>news</category>
+<pubDate>Mon, 26 Sep 2005 10:00:56 +0900</pubDate>
+</item>
+<item>
+<title>企業ブログ向けパッケージ「TypePad Promotion」を新発売</title>
+<description><![CDATA[<p>シックス・アパートは、ウェブログ・サービスTypePadの企業ブログ向けパッケージ「TypePad Promotion」(タイプパッド・プロモーションの発売を10月下旬から開始いたします。</p>
+
+<p>詳しくは、<a href="http://www.sixapart.jp/press_releases/2005/09/20-1500.html" title="プレスリリース: 「TypePad Promotion」新発売">プレスリリース</a>をご参照下さい。</p>]]></description>
+<link>http://www.sixapart.jp/news/2005/09/20-1500.html</link>
+<guid>http://www.sixapart.jp/news/2005/09/20-1500.html</guid>
+<category>news</category>
+<pubDate>Tue, 20 Sep 2005 15:00:01 +0900</pubDate>
+</item>
+<item>
+<title>シックス・アパートが、法人向けブログパッケージ「TypePad Promotion」を発売</title>
+<description><![CDATA[<p><プレスリリース資料><br />
+<a href="http://www.sixapart.jp/sixapart20050920.pdf">印刷用(PDF版)</a></p>
+
+<p><br />
+<strong>シックス・アパートが、法人向けブログパッケージ「TypePad Promotion」を発売<br />
+~PR/IRサイトやキャンペーンサイトなど企業のプロモーションニーズに特化~<br />
+</strong><br />
+2005年9月20日<br />
+シックス・アパート株式会社</p>
+
+<p>ブログ・サービス大手のシックス・アパート株式会社(本社:東京都港区、代表取締役:関 信浩)は、法人向けプロモーションブログ・パッケージ「TypePad Promotion(タイプパッド・プロモーション)」(URL:<a href="http://www.sixapart.jp/typepad/typepad_promotion.html">http://www.sixapart.jp/typepad/typepad_promotion.html</a>)を10月下旬より販売開始いたします。</p>]]></description>
+<link>http://www.sixapart.jp/press_releases/2005/09/20-1500.html</link>
+<guid>http://www.sixapart.jp/press_releases/2005/09/20-1500.html</guid>
+<category>Press Releases</category>
+<pubDate>Tue, 20 Sep 2005 15:00:00 +0900</pubDate>
+</item>
+<item>
+<title>Six [days] Apart Week</title>
+<description><![CDATA[<p>本日、9月16日はSix Apartの創業者ミナ・トロットの誕生日です。<br />
+私たちの会社は、創業者のトロット夫妻(ベンとミナ)の誕生日が、6日離れていることからSix  [days] Apart →Six Apartという風に名付けられています。本日から22日までの6日間を社名の由来となる Six [days] Apart Weekとして、私たちのプロダクトをご紹介させていただきます。</p>
+
+<p>今日は、ブログ・サービスのTypePad(タイプパッド)をご紹介します。<br />
+<img alt="tp-logo.gif" src="http://www.sixapart.jp/tp-logo.gif" width="227" height="52" /></p>
+
+<p>TypePadは、米国PC MAGAZINE誌の2003年EDITOR'S CHOICE とBEST OF THE YEARに選ばれております。<br />
+<img alt="pcmag-ad.gif" src="http://www.sixapart.jp/pcmag-ad.gif" width="297" height="100" /><br />
+</p>]]></description>
+<link>http://www.sixapart.jp/news/2005/09/16-1941.html</link>
+<guid>http://www.sixapart.jp/news/2005/09/16-1941.html</guid>
+<category>news</category>
+<pubDate>Fri, 16 Sep 2005 19:41:47 +0900</pubDate>
+</item>
+<item>
+<title>ハイパーワークスが商用フォントを利用できるMovable Typeホスティングサービスを開始</title>
+<description><![CDATA[<p>ソフト開発会社の<a href="http://www.hyperwrx.co.jp/">有限会社ハイパーワークス</a>は、商用フォントなど多彩なフォントをブログ上で利用できるブログ・サービス「<a href="http://glyph-on.jp/">Glyph-On!(グリフォン) Movable Type ホスティング サービス</a>」の提供を開始しました。<br />
+</p>]]></description>
+<link>http://www.sixapart.jp/news/2005/09/14-1700.html</link>
+<guid>http://www.sixapart.jp/news/2005/09/14-1700.html</guid>
+<category>news</category>
+<pubDate>Wed, 14 Sep 2005 17:00:00 +0900</pubDate>
+</item>
+<item>
+<title>Movable Type開発エンジニアの募集</title>
+<description><![CDATA[<p>
+勤務形態: フルタイム<br />
+勤務地: 東京 (赤坂)<br />
+職種: ソフトウェア・エンジニア<br />
+職務内容: Movable Typeの開発業務全般<br />
+募集人数: 若干名
+</p>]]></description>
+<link>http://www.sixapart.jp/jobs/2005/09/13-0007.html</link>
+<guid>http://www.sixapart.jp/jobs/2005/09/13-0007.html</guid>
+<category>Jobs</category>
+<pubDate>Tue, 13 Sep 2005 00:07:00 +0900</pubDate>
+</item>
+<item>
+<title>TypePad開発エンジニアの募集</title>
+<description><![CDATA[<p>
+勤務形態: フルタイム<br />
+勤務地: 東京 (赤坂)<br />
+職種: アプリケーション・エンジニア<br />
+職務内容: TypePadのカスタマイズ、周辺開発<br />
+募集人数: 若干名
+</p>]]></description>
+<link>http://www.sixapart.jp/jobs/2005/09/13-0004.html</link>
+<guid>http://www.sixapart.jp/jobs/2005/09/13-0004.html</guid>
+<category>Jobs</category>
+<pubDate>Tue, 13 Sep 2005 00:04:00 +0900</pubDate>
+</item>
+<item>
+<title>カスタマーサポート・ディレクターの募集</title>
+<description><![CDATA[<p>勤務形態: フルタイム<br />
+勤務地: 東京(赤坂)<br />
+職種: カスタマーサポート・ディレクター<br />
+職務内容: TypePadやMovable Typeのカスタマーサポート業務の統括<br />
+募集人数: 若干名
+</p>
+]]></description>
+<link>http://www.sixapart.jp/jobs/2005/09/13-0003.html</link>
+<guid>http://www.sixapart.jp/jobs/2005/09/13-0003.html</guid>
+<category>Jobs</category>
+<pubDate>Tue, 13 Sep 2005 00:03:30 +0900</pubDate>
+</item>
+<item>
+<title>アルバイト(マーケティング・広報アシスタント)の募集</title>
+<description><![CDATA[<p>勤務形態: アルバイト<br />
+勤務地: 東京(港区)<br />
+職種:マーケティング・PRのアシスタント業務<br />
+募集人数: 若干名<br />
+時給:1000円~(但し、試用期間終了後に応相談)。交通費支給<br />
+時間:平日10時30分~18時30分まで。週3日以上(応相談)<br />
+</p>]]></description>
+<link>http://www.sixapart.jp/jobs/2005/09/13-0002.html</link>
+<guid>http://www.sixapart.jp/jobs/2005/09/13-0002.html</guid>
+<category>Jobs</category>
+<pubDate>Tue, 13 Sep 2005 00:02:00 +0900</pubDate>
+</item>
+<item>
+<title>アルバイト(開発アシスタント)の募集</title>
+<description><![CDATA[<p>勤務形態: アルバイト<br />
+勤務地: 東京(港区)<br />
+職種: アプリケーション開発のアシスタント業務<br />
+募集人数: 若干名<br />
+時給:1000円~(但し、試用期間終了後に応相談)。交通費支給<br />
+時間:平日10時30分~18時30分まで。週3日以上(応相談)
+</p>]]></description>
+<link>http://www.sixapart.jp/jobs/2005/09/13-0001.html</link>
+<guid>http://www.sixapart.jp/jobs/2005/09/13-0001.html</guid>
+<category>Jobs</category>
+<pubDate>Tue, 13 Sep 2005 00:01:00 +0900</pubDate>
+</item>
+<item>
+<title>TypePad Japan がバージョンアップしました。</title>
+<description><![CDATA[<p><a href="http://www.sixapart.jp/typepad/">「TypePad Japan(タイプパッドジャパン)」</a>において、本日、「TypePad 1.6 日本語版」へのバージョンアップを行いました。最新版となる「TypePad 1.6 日本語版」では、ブログデザインの機能強化、ポッドキャスティング対応、モブログ対応に加え、今回新たに大幅な容量アップが行われております。皆様、新しくなった<a href="http://www.sixapart.jp/typepad/">TypePad Japan</a>にどうぞご期待ください。</p>
+
+<p>なお、TypePadの携帯対応強化に関しましては、本日よりTypePad Japanのお客様を対象にオープン・ベータを開始しております。</p>
+
+<p>2005年9月5日発表のTypePad日本語版 1.6プレスリリースは<a href="http://www.sixapart.jp/press_releases/2005/09/05-1420.html">こちら</a>をご覧下さい。</p>]]></description>
+<link>http://www.sixapart.jp/news/2005/09/12-1953.html</link>
+<guid>http://www.sixapart.jp/news/2005/09/12-1953.html</guid>
+<category>news</category>
+<pubDate>Mon, 12 Sep 2005 19:53:07 +0900</pubDate>
+</item>
+
+
+</channel>
+</rss>
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/technorati.feed b/plugins/OStatus/extlib/XML/Feed/samples/technorati.feed
new file mode 100755 (executable)
index 0000000..6274a32
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0"
+    xmlns:tapi="http://api.technorati.com/dtd/tapi-002.xml">
+    <channel>
+        <title>[Technorati] Tag results for greenbelt</title>
+        <link>http://www.technorati.com/tag/greenbelt</link>
+        <description>Posts tagged with "greenbelt" on Technorati.</description>
+        <pubDate>Mon, 08 Aug 2005 15:15:08 GMT</pubDate>
+        <category domain="http://www.technorati.com/tag">greenbelt</category>
+        <tapi:inboundblogs>2</tapi:inboundblogs>
+        <tapi:inboundlinks>2</tapi:inboundlinks>
+        <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
+        <generator>Technorati v1.0</generator>
+        <image>
+            <url>http://static.technorati.com/pix/logos/logo_reverse_sm.gif</url>
+            <title>Technorati logo</title>
+            <link>http://www.technorati.com</link>
+        </image>
+        <skipHours>
+            <hour>1</hour>
+            <hour>7</hour>
+            <hour>9</hour>
+        </skipHours>
+        <webMaster>support@technorati.com (Technorati Support)</webMaster>
+        <docs>http://blogs.law.harvad.edu/tech/rss</docs>
+        <ttl>60</ttl>
+        <item>
+            <title>Greenbelt</title>
+            <link>http://maggidawn.typepad.com/maggidawn/2005/07/greenbelt.html</link>
+            <description>So if the plan goes according to plan (!)... I'll be speaking at Greenbelt at these times: Slot 1...</description>
+            <guid isPermaLink="true">http://maggidawn.typepad.com/maggidawn/2005/07/greenbelt.html</guid>
+            <pubDate>Mon, 18 Jul 2005 02:11:42 GMT</pubDate>
+            <category>James</category>
+            <tapi:linkcreated>2005-07-11 02:08:12</tapi:linkcreated>
+            <comments>http://www.technorati.com/cosmos/search.html?url=http%3A%2F%2Fmaggidawn.typepad.com%2Fmaggidawn%2F2005%2F07%2Fgreenbelt.html</comments>
+            <tapi:inboundblogs>190</tapi:inboundblogs>
+            <tapi:inboundlinks>237</tapi:inboundlinks>
+            <source url="http://maggidawn.typepad.com/maggidawn/index.rdf">maggi dawn</source>
+        </item>
+
+        <item>
+            <title>Walking along the Greenbelt</title>
+            <link>http://pictureshomeless.blogspot.com/2005/06/walking-along-greenbelt.html</link>
+            <description>[IMG] Photo of homeless man walking near the greenbelt in Boise, Idaho Tags: photo homeless greenbelt Boise Idaho picture</description>
+            <guid isPermaLink="true">http://pictureshomeless.blogspot.com/2005/06/walking-along-greenbelt.html</guid>
+            <pubDate>Tue, 28 Jun 2005 01:41:24 GMT</pubDate>
+            <tapi:linkcreated>2005-06-26 17:24:03</tapi:linkcreated>
+            <comments>http://www.technorati.com/cosmos/search.html?url=http%3A%2F%2Fpictureshomeless.blogspot.com%2F2005%2F06%2Fwalking-along-greenbelt.html</comments>
+            <tapi:inboundblogs>2</tapi:inboundblogs>
+            <tapi:inboundlinks>2</tapi:inboundlinks>
+        </item>
+
+    </channel>
+</rss>
diff --git a/plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc
new file mode 100755 (executable)
index 0000000..e662d26
--- /dev/null
@@ -0,0 +1,338 @@
+# -*- rnc -*-
+# RELAX NG Compact Syntax Grammar for the
+# Atom Format Specification Version 11
+
+namespace atom = "http://www.w3.org/2005/Atom"
+namespace xhtml = "http://www.w3.org/1999/xhtml"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace local = ""
+
+start = atomFeed | atomEntry
+
+# Common attributes
+
+atomCommonAttributes =
+   attribute xml:base { atomUri }?,
+   attribute xml:lang { atomLanguageTag }?,
+   undefinedAttribute*
+
+# Text Constructs
+
+atomPlainTextConstruct =
+   atomCommonAttributes,
+   attribute type { "text" | "html" }?,
+   text
+
+atomXHTMLTextConstruct =
+   atomCommonAttributes,
+   attribute type { "xhtml" },
+   xhtmlDiv
+
+atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
+
+# Person Construct
+
+atomPersonConstruct =
+   atomCommonAttributes,
+   (element atom:name { text }
+    & element atom:uri { atomUri }?
+    & element atom:email { atomEmailAddress }?
+    & extensionElement*)
+
+# Date Construct
+
+atomDateConstruct =
+   atomCommonAttributes,
+   xsd:dateTime
+
+# atom:feed
+
+atomFeed =
+   [
+      s:rule [
+         context = "atom:feed"
+         s:assert [
+            test = "atom:author or not(atom:entry[not(atom:author)])"
+            "An atom:feed must have an atom:author unless all "
+            ~ "of its atom:entry children have an atom:author."
+         ]
+      ]
+   ]
+   element atom:feed {
+      atomCommonAttributes,
+      (atomAuthor*
+       & atomCategory*
+       & atomContributor*
+       & atomGenerator?
+       & atomIcon?
+       & atomId
+       & atomLink*
+       & atomLogo?
+       & atomRights?
+       & atomSubtitle?
+       & atomTitle
+       & atomUpdated
+       & extensionElement*),
+      atomEntry*
+   }
+
+# atom:entry
+
+atomEntry =
+   [
+      s:rule [
+         context = "atom:entry"
+         s:assert [
+            test = "atom:link[@rel='alternate'] "
+            ~ "or atom:link[not(@rel)] "
+            ~ "or atom:content"
+            "An atom:entry must have at least one atom:link element "
+            ~ "with a rel attribute of 'alternate' "
+            ~ "or an atom:content."
+         ]
+      ]
+      s:rule [
+         context = "atom:entry"
+         s:assert [
+            test = "atom:author or "
+            ~ "../atom:author or atom:source/atom:author"
+            "An atom:entry must have an atom:author "
+            ~ "if its feed does not."
+         ]
+      ]
+   ]
+   element atom:entry {
+      atomCommonAttributes,
+      (atomAuthor*
+       & atomCategory*
+       & atomContent?
+       & atomContributor*
+       & atomId
+       & atomLink*
+       & atomPublished?
+       & atomRights?
+       & atomSource?
+       & atomSummary?
+       & atomTitle
+       & atomUpdated
+       & extensionElement*)
+   }
+
+# atom:content
+
+atomInlineTextContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { "text" | "html" }?,
+      (text)*
+   }
+
+atomInlineXHTMLContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { "xhtml" },
+      xhtmlDiv
+   }
+
+atomInlineOtherContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { atomMediaType }?,
+      (text|anyElement)*
+   }
+
+atomOutOfLineContent =
+   element atom:content {
+      atomCommonAttributes,
+      attribute type { atomMediaType }?,
+      attribute src { atomUri },
+      empty
+   }
+
+atomContent = atomInlineTextContent
+ | atomInlineXHTMLContent
+ | atomInlineOtherContent
+ | atomOutOfLineContent
+
+# atom:author
+
+atomAuthor = element atom:author { atomPersonConstruct }
+
+# atom:category
+
+atomCategory =
+   element atom:category {
+      atomCommonAttributes,
+      attribute term { text },
+      attribute scheme { atomUri }?,
+      attribute label { text }?,
+      undefinedContent
+   }
+
+# atom:contributor
+
+atomContributor = element atom:contributor { atomPersonConstruct }
+
+# atom:generator
+
+atomGenerator = element atom:generator {
+   atomCommonAttributes,
+   attribute uri { atomUri }?,
+   attribute version { text }?,
+   text
+}
+
+# atom:icon
+
+atomIcon = element atom:icon {
+   atomCommonAttributes,
+   (atomUri)
+}
+
+# atom:id
+
+atomId = element atom:id {
+   atomCommonAttributes,
+   (atomUri)
+}
+
+# atom:logo
+
+atomLogo = element atom:logo {
+   atomCommonAttributes,
+   (atomUri)
+}
+
+# atom:link
+
+atomLink =
+   element atom:link {
+      atomCommonAttributes,
+      attribute href { atomUri },
+      attribute rel { atomNCName | atomUri }?,
+      attribute type { atomMediaType }?,
+      attribute hreflang { atomLanguageTag }?,
+      attribute title { text }?,
+      attribute length { text }?,
+      undefinedContent
+   }
+
+# atom:published
+
+atomPublished = element atom:published { atomDateConstruct }
+
+# atom:rights
+
+atomRights = element atom:rights { atomTextConstruct }
+
+# atom:source
+
+atomSource =
+   element atom:source {
+      atomCommonAttributes,
+      (atomAuthor*
+       & atomCategory*
+       & atomContributor*
+       & atomGenerator?
+       & atomIcon?
+       & atomId?
+       & atomLink*
+       & atomLogo?
+       & atomRights?
+       & atomSubtitle?
+       & atomTitle?
+       & atomUpdated?
+       & extensionElement*)
+   }
+
+# atom:subtitle
+
+atomSubtitle = element atom:subtitle { atomTextConstruct }
+
+# atom:summary
+
+atomSummary = element atom:summary { atomTextConstruct }
+
+# atom:title
+
+atomTitle = element atom:title { atomTextConstruct }
+
+# atom:updated
+
+atomUpdated = element atom:updated { atomDateConstruct }
+
+# Low-level simple types
+
+atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" }
+
+# Whatever a media type is, it contains at least one slash
+atomMediaType = xsd:string { pattern = ".+/.+" }
+
+# As defined in RFC 3066
+atomLanguageTag = xsd:string {
+   pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
+}
+
+# Unconstrained; it's not entirely clear how IRI fit into
+# xsd:anyURI so let's not try to constrain it here
+atomUri = text
+
+# Whatever an email address is, it contains at least one @
+atomEmailAddress = xsd:string { pattern = ".+@.+" }
+
+# Simple Extension
+
+simpleExtensionElement =
+   element * - atom:* {
+      text
+   }
+
+# Structured Extension
+
+structuredExtensionElement =
+   element * - atom:* {
+      (attribute * { text }+,
+         (text|anyElement)*)
+    | (attribute * { text }*,
+       (text?, anyElement+, (text|anyElement)*))
+   }
+
+# Other Extensibility
+
+extensionElement =
+   simpleExtensionElement | structuredExtensionElement
+
+undefinedAttribute =
+  attribute * - (xml:base | xml:lang | local:*) { text }
+
+undefinedContent = (text|anyForeignElement)*
+
+anyElement =
+   element * {
+      (attribute * { text }
+       | text
+       | anyElement)*
+   }
+
+anyForeignElement =
+   element * - atom:* {
+      (attribute * { text }
+       | text
+       | anyElement)*
+   }
+
+# XHTML
+
+anyXHTML = element xhtml:* {
+   (attribute * { text }
+    | text
+    | anyXHTML)*
+}
+
+xhtmlDiv = element xhtml:div {
+   (attribute * { text }
+    | text
+    | anyXHTML)*
+}
+
+# EOF
\ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc
new file mode 100755 (executable)
index 0000000..7250947
--- /dev/null
@@ -0,0 +1,113 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
+<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
+<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
+
+<grammar xmlns='http://relaxng.org/ns/structure/1.0'
+        xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
+        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+        ns='http://purl.org/rss/1.0/'
+        datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'>
+
+    <start>
+        <element name='RDF' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+            <ref name='RDFContent'/>
+        </element>
+    </start>   
+
+    <define name='RDFContent' ns='http://purl.org/rss/1.0/'>
+        <interleave>
+            <element name='channel'>
+                <ref name='channelContent'/>
+            </element>
+            <optional>
+                <element name='image'><ref name='imageContent'/></element>
+            </optional>
+            <oneOrMore>
+                <element name='item'><ref name='itemContent'/></element>
+            </oneOrMore>
+        </interleave>
+    </define>
+
+     <define name='channelContent' combine="interleave">
+        <interleave>
+            <element name='title'><data type='string'/></element>
+            <element name='link'><data type='anyURI'/></element>
+            <element name='description'><data type='string'/></element>
+            <element name='image'>
+                <attribute name='resource' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+                    <data type='anyURI'/>
+                </attribute>
+            </element>
+            <element name='items'>
+                    <ref name='itemsContent'/>
+            </element>
+            <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+                <data type='anyURI'/>
+            </attribute>
+        </interleave>
+    </define>
+    
+        <define name="itemsContent">
+            <element name="Seq" ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+                <oneOrMore>
+                    <element name="li" ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+                        <choice>
+                            <attribute name='resource'>    <!-- Why doesn't RDF/RSS1.0 ns qualify this attribute? -->
+                                <data type='anyURI'/>
+                            </attribute>
+                            <attribute name='resource' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+                                <data type='anyURI'/>
+                            </attribute>
+                        </choice>
+                    </element>
+                </oneOrMore>
+            </element>
+        </define>
+        
+    <define name='imageContent'>
+        <interleave>
+            <element name='title'><data type='string'/></element>
+            <element name='link'><data type='anyURI'/></element>
+            <element name='url'><data type='anyURI'/></element>
+            <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+                <data type='anyURI'/>
+            </attribute>
+        </interleave>
+    </define>
+
+    <define name='itemContent'>
+        <interleave>
+            <element name='title'><data type='string'/></element>
+            <element name='link'><data type='anyURI'/></element>
+            <optional><element name='description'><data type='string'/></element></optional>
+            <ref name="anyThing"/>
+            <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+                <data type='anyURI'/>
+            </attribute>
+        </interleave>
+    </define>            
+            
+
+        <define name='anyThing'>
+            <zeroOrMore>
+                <choice>
+                    <text/>
+                    <element>
+                        <anyName>
+                            <except>
+                                <nsName/>
+                            </except>
+                        </anyName>
+                        <ref name='anyThing'/>
+                        <zeroOrMore>
+                            <attribute>
+                              <anyName/>
+                            </attribute>
+                        </zeroOrMore>
+                    </element>
+                </choice>
+            </zeroOrMore>
+            </define>
+            
+</grammar>
diff --git a/plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc
new file mode 100755 (executable)
index 0000000..c863376
--- /dev/null
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  RELAX NG Compact Schema for RSS 1.1
+  Sean B. Palmer, inamidst.com
+  Christopher Schmidt, crschmidt.net
+  License: This schema is in the public domain
+-->
+<grammar xmlns:rss="http://purl.org/net/rss1.1#" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ns="http://purl.org/net/rss1.1#" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <start>
+    <ref name="Channel"/>
+  </start>
+  <define name="Channel">
+    <a:documentation>http://purl.org/net/rss1.1#Channel</a:documentation>
+    <element name="Channel">
+      <ref name="Channel.content"/>
+
+    </element>
+  </define>
+  <define name="Channel.content">
+    <optional>
+      <ref name="AttrXMLLang"/>
+    </optional>
+    <optional>
+      <ref name="AttrXMLBase"/>
+    </optional>
+
+    <ref name="AttrRDFAbout"/>
+    <interleave>
+      <ref name="title"/>
+      <ref name="link"/>
+      <ref name="description"/>
+      <optional>
+        <ref name="image"/>
+      </optional>
+      <zeroOrMore>
+
+        <ref name="Any"/>
+      </zeroOrMore>
+      <ref name="items"/>
+    </interleave>
+  </define>
+  <define name="title">
+    <a:documentation>http://purl.org/net/rss1.1#title</a:documentation>
+    <element name="title">
+
+      <ref name="title.content"/>
+    </element>
+  </define>
+  <define name="title.content">
+    <optional>
+      <ref name="AttrXMLLang"/>
+    </optional>
+    <text/>
+  </define>
+
+  <define name="link">
+    <a:documentation>http://purl.org/net/rss1.1#link</a:documentation>
+    <element name="link">
+      <ref name="link.content"/>
+    </element>
+  </define>
+  <define name="link.content">
+    <data type="anyURI"/>
+
+  </define>
+  <define name="description">
+    <a:documentation>http://purl.org/net/rss1.1#description</a:documentation>
+    <element name="description">
+      <ref name="description.content"/>
+    </element>
+  </define>
+  <define name="description.content">
+
+    <optional>
+      <ref name="AttrXMLLang"/>
+    </optional>
+    <text/>
+  </define>
+  <define name="image">
+    <a:documentation>http://purl.org/net/rss1.1#image</a:documentation>
+    <element name="image">
+
+      <ref name="image.content"/>
+    </element>
+  </define>
+  <define name="image.content">
+    <optional>
+      <ref name="AttrXMLLang"/>
+    </optional>
+    <ref name="AttrRDFResource"/>
+    <interleave>
+
+      <ref name="title"/>
+      <optional>
+        <ref name="link"/>
+      </optional>
+      <ref name="url"/>
+      <zeroOrMore>
+        <ref name="Any"/>
+      </zeroOrMore>
+    </interleave>
+
+  </define>
+  <define name="url">
+    <a:documentation>http://purl.org/net/rss1.1#url</a:documentation>
+    <element name="url">
+      <ref name="url.content"/>
+    </element>
+  </define>
+  <define name="url.content">
+
+    <data type="anyURI"/>
+  </define>
+  <define name="items">
+    <a:documentation>http://purl.org/net/rss1.1#items</a:documentation>
+    <element name="items">
+      <ref name="items.content"/>
+    </element>
+  </define>
+
+  <define name="items.content">
+    <optional>
+      <ref name="AttrXMLLang"/>
+    </optional>
+    <ref name="AttrRDFCollection"/>
+    <zeroOrMore>
+      <ref name="item"/>
+    </zeroOrMore>
+  </define>
+
+  <define name="item">
+    <a:documentation>http://purl.org/net/rss1.1#item</a:documentation>
+    <element name="item">
+      <ref name="item.content"/>
+    </element>
+  </define>
+  <define name="item.content">
+    <optional>
+
+      <ref name="AttrXMLLang"/>
+    </optional>
+    <ref name="AttrRDFAbout"/>
+    <interleave>
+      <ref name="title"/>
+      <ref name="link"/>
+      <optional>
+        <ref name="description"/>
+      </optional>
+
+      <optional>
+        <ref name="image"/>
+      </optional>
+      <zeroOrMore>
+        <ref name="Any"/>
+      </zeroOrMore>
+    </interleave>
+  </define>
+  <define name="Any">
+
+    <a:documentation>http://purl.org/net/rss1.1#Any</a:documentation>
+    <element>
+      <anyName>
+        <except>
+          <nsName/>
+        </except>
+      </anyName>
+      <ref name="Any.content"/>
+
+    </element>
+  </define>
+  <define name="Any.content">
+    <zeroOrMore>
+      <attribute>
+        <anyName>
+          <except>
+            <nsName/>
+            <nsName ns=""/>
+
+          </except>
+        </anyName>
+      </attribute>
+    </zeroOrMore>
+    <mixed>
+      <zeroOrMore>
+        <ref name="Any"/>
+      </zeroOrMore>
+    </mixed>
+
+  </define>
+  <define name="AttrXMLLang">
+    <attribute name="xml:lang">
+      <data type="language"/>
+    </attribute>
+  </define>
+  <define name="AttrXMLBase">
+    <attribute name="xml:base">
+      <data type="anyURI"/>
+
+    </attribute>
+  </define>
+  <define name="AttrRDFAbout">
+    <attribute name="rdf:about">
+      <data type="anyURI"/>
+    </attribute>
+  </define>
+  <define name="AttrRDFResource">
+    <attribute name="rdf:parseType">
+
+      <value>Resource</value>
+    </attribute>
+  </define>
+  <define name="AttrRDFCollection">
+    <attribute name="rdf:parseType">
+      <value>Collection</value>
+    </attribute>
+  </define>
+
+</grammar>
diff --git a/plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch b/plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch
new file mode 100644 (file)
index 0000000..c53bd97
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/htdocs/lib/pear/XML/Feed/Parser/RSS2.php b/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
+index c5d79d1..308a4ab 100644
+--- a/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
++++ b/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
+@@ -321,7 +321,8 @@ class XML_Feed_Parser_RSS2 extends XML_Feed_Parser_Type
+      */
+     function getLink($offset, $attribute = 'href', $params = array())
+     {
+-        $links = $this->model->getElementsByTagName('link');
++        $xPath = new DOMXPath($this->model);
++        $links = $xPath->query('//link');
+         if ($links->length <= $offset) {
+             return false;
diff --git a/plugins/OStatus/images/24px-Feed-icon.svg.png b/plugins/OStatus/images/24px-Feed-icon.svg.png
new file mode 100644 (file)
index 0000000..3172258
Binary files /dev/null and b/plugins/OStatus/images/24px-Feed-icon.svg.png differ
diff --git a/plugins/OStatus/images/48px-Feed-icon.svg.png b/plugins/OStatus/images/48px-Feed-icon.svg.png
new file mode 100644 (file)
index 0000000..bd1da4f
Binary files /dev/null and b/plugins/OStatus/images/48px-Feed-icon.svg.png differ
diff --git a/plugins/OStatus/images/96px-Feed-icon.svg.png b/plugins/OStatus/images/96px-Feed-icon.svg.png
new file mode 100644 (file)
index 0000000..bf16571
Binary files /dev/null and b/plugins/OStatus/images/96px-Feed-icon.svg.png differ
diff --git a/plugins/OStatus/images/README b/plugins/OStatus/images/README
new file mode 100644 (file)
index 0000000..d9379c2
--- /dev/null
@@ -0,0 +1,5 @@
+Feed icon rendered from http://commons.wikimedia.org/wiki/File:Feed-icon.svg
+
+Originally distributed by the Mozilla Foundation under a MPL/GPL/LGPL tri-license:
+
+http://www.mozilla.org/MPL/boilerplate-1.1/mpl-tri-license-html
diff --git a/plugins/OStatus/lib/activity.php b/plugins/OStatus/lib/activity.php
new file mode 100644 (file)
index 0000000..36e2279
--- /dev/null
@@ -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/OStatus/lib/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php
new file mode 100644 (file)
index 0000000..39985fc
--- /dev/null
@@ -0,0 +1,231 @@
+<?php
+/*
+ * 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); }
+
+class FeedSubBadURLException extends FeedSubException
+{
+}
+
+class FeedSubBadResponseException extends FeedSubException
+{
+}
+
+class FeedSubEmptyException extends FeedSubException
+{
+}
+
+class FeedSubBadHTMLException extends FeedSubException
+{
+}
+
+class FeedSubUnrecognizedTypeException extends FeedSubException
+{
+}
+
+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;
+    public $type;
+    public $body;
+
+
+    public function feedMunger()
+    {
+        require_once 'XML/Feed/Parser.php';
+        $feed = new XML_Feed_Parser($this->body, false, false, true); // @fixme
+        return new FeedMunger($feed, $this->uri);
+    }
+
+    /**
+     * @param string $url
+     * @param bool $htmlOk pass false here if you don't want to follow web pages.
+     * @return string with validated URL
+     * @throws FeedSubBadURLException
+     * @throws FeedSubBadHtmlException
+     * @throws FeedSubNoFeedException
+     * @throws FeedSubEmptyException
+     * @throws FeedSubUnrecognizedTypeException
+     */
+    function discoverFromURL($url, $htmlOk=true)
+    {
+        try {
+            $client = new HTTPClient();
+            $response = $client->get($url);
+        } catch (HTTP_Request2_Exception $e) {
+            throw new FeedSubBadURLException($e);
+        }
+
+        if ($htmlOk) {
+            $type = $response->getHeader('Content-Type');
+            $isHtml = preg_match('!^(text/html|application/xhtml\+xml)!i', $type);
+            if ($isHtml) {
+                $target = $this->discoverFromHTML($response->getUrl(), $response->getBody());
+                if (!$target) {
+                    throw new FeedSubNoFeedException($url);
+                }
+                return $this->discoverFromURL($target, false);
+            }
+        }
+        
+        return $this->initFromResponse($response);
+    }
+    
+    function initFromResponse($response)
+    {
+        if (!$response->isOk()) {
+            throw new FeedSubBadResponseException($response->getCode());
+        }
+
+        $sourceurl = $response->getUrl();
+        $body = $response->getBody();
+        if (!$body) {
+            throw new FeedSubEmptyException($sourceurl);
+        }
+
+        $type = $response->getHeader('Content-Type');
+        if (preg_match('!^(text/xml|application/xml|application/(rss|atom)\+xml)!i', $type)) {
+            $this->uri = $sourceurl;
+            $this->type = $type;
+            $this->body = $body;
+            return true;
+        } else {
+            common_log(LOG_WARNING, "Unrecognized feed type $type for $sourceurl");
+            throw new FeedSubUnrecognizedTypeException($type);
+        }
+    }
+
+    /**
+     * @param string $url source URL, used to resolve relative links
+     * @param string $body HTML body text
+     * @return mixed string with URL or false if no target found
+     */
+    function discoverFromHTML($url, $body)
+    {
+        // DOMDocument::loadHTML may throw warnings on unrecognized elements.
+        $old = error_reporting(error_reporting() & ~E_WARNING);
+        $dom = new DOMDocument();
+        $ok = $dom->loadHTML($body);
+        error_reporting($old);
+
+        if (!$ok) {
+            throw new FeedSubBadHtmlException();
+        }
+
+        // Autodiscovery links may be relative to the page's URL or <base href>
+        $base = false;
+        $nodes = $dom->getElementsByTagName('base');
+        for ($i = 0; $i < $nodes->length; $i++) {
+            $node = $nodes->item($i);
+            if ($node->hasAttributes()) {
+                $href = $node->attributes->getNamedItem('href');
+                if ($href) {
+                    $base = trim($href->value);
+                }
+            }
+        }
+        if ($base) {
+            $base = $this->resolveURI($base, $url);
+        } else {
+            $base = $url;
+        }
+
+        // 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);
+            if ($node->hasAttributes()) {
+                $rel = $node->attributes->getNamedItem('rel');
+                $type = $node->attributes->getNamedItem('type');
+                $href = $node->attributes->getNamedItem('href');
+                if ($rel && $type && $href) {
+                    $rel = trim($rel->value);
+                    $type = trim($type->value);
+                    $href = trim($href->value);
+
+                    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;
+    }
+
+    /**
+     * Resolve a possibly relative URL against some absolute base URL
+     * @param string $rel relative or absolute URL
+     * @param string $base absolute URL
+     * @return string absolute URL, or original URL if could not be resolved.
+     */
+    function resolveURI($rel, $base)
+    {
+        require_once "Net/URL2.php";
+        try {
+            $relUrl = new Net_URL2($rel);
+            if ($relUrl->isAbsolute()) {
+                return $rel;
+            }
+            $baseUrl = new Net_URL2($base);
+            $absUrl = $baseUrl->resolve($relUrl);
+            return $absUrl->getURL();
+        } catch (Exception $e) {
+            common_log(LOG_WARNING, 'Unable to resolve relative link "' .
+                $rel . '" against base "' . $base . '": ' . $e->getMessage());
+            return $rel;
+        }
+    }
+}
diff --git a/plugins/OStatus/lib/feedmunger.php b/plugins/OStatus/lib/feedmunger.php
new file mode 100644 (file)
index 0000000..c895b6c
--- /dev/null
@@ -0,0 +1,349 @@
+<?php
+/*
+ * 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); }
+
+class FeedSubPreviewNotice extends Notice
+{
+    protected $fetched = true;
+
+    function __construct($profile)
+    {
+        $this->profile = $profile;
+        $this->profile_id = 0;
+    }
+    
+    function getProfile()
+    {
+        return $this->profile;
+    }
+    
+    function find()
+    {
+        return true;
+    }
+    
+    function fetch()
+    {
+        $got = $this->fetched;
+        $this->fetched = false;
+        return $got;
+    }
+}
+
+class FeedSubPreviewProfile extends Profile
+{
+    function getAvatar($width, $height=null)
+    {
+        return new FeedSubPreviewAvatar($width, $height, $this->avatar);
+    }
+}
+
+class FeedSubPreviewAvatar extends Avatar
+{
+    function __construct($width, $height, $remote)
+    {
+        $this->remoteImage = $remote;
+    }
+
+    function displayUrl() {
+        return $this->remoteImage;
+    }
+}
+
+class FeedMunger
+{
+    /**
+     * @param XML_Feed_Parser $feed
+     */
+    function __construct($feed, $url=null)
+    {
+        $this->feed = $feed;
+        $this->url = $url;
+    }
+    
+    function ostatusProfile()
+    {
+        $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())
+    {
+        // XML_Feed_Parser gets confused by multiple <link> elements.
+        $dom = $item->model;
+
+        // Note that RSS feeds would embed an <atom:link> so this should work for both.
+        /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
+        // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
+        $links = $dom->getElementsByTagNameNS('http://www.w3.org/2005/Atom', 'link');
+        for ($i = 0; $i < $links->length; $i++) {
+            $node = $links->item($i);
+            if ($node->hasAttributes()) {
+                $href = $node->attributes->getNamedItem('href');
+                if ($href) {
+                    $matches = 0;
+                    foreach ($attribs as $name => $val) {
+                        $attrib = $node->attributes->getNamedItem($name);
+                        if ($attrib && $attrib->value == $val) {
+                            $matches++;
+                        }
+                    }
+                    if ($matches == count($attribs)) {
+                        return $href->value;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    function getRssLink($item)
+    {
+        // XML_Feed_Parser gets confused by multiple <link> elements.
+        $dom = $item->model;
+
+        // Note that RSS feeds would embed an <atom:link> so this should work for both.
+        /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
+        // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
+        $links = $dom->getElementsByTagName('link');
+        for ($i = 0; $i < $links->length; $i++) {
+            $node = $links->item($i);
+            if (!$node->hasAttributes()) {
+                return $node->textContent;
+            }
+        }
+        return false;
+    }
+
+    function getAltLink($item)
+    {
+        // Check for an atom link...
+        $link = $this->getAtomLink($item, array('rel' => 'alternate', 'type' => 'text/html'));
+        if (!$link) {
+            $link = $this->getRssLink($item);
+        }
+        return $link;
+    }
+
+    function getHubLink()
+    {
+        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) {
+            $profile = new FeedSubPreviewProfile();
+        } else {
+            $profile = new Profile();
+        }
+        
+        // @todo validate/normalize nick?
+        $profile->nickname   = $this->feed->title;
+        $profile->fullname   = $this->feed->title;
+        $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?
+
+        return $profile;
+    }
+
+    function notice($index=1, $preview=false)
+    {
+        $entry = $this->feed->getEntryByOffset($index);
+        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); // @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.
+
+        $title = $entry->title;
+        $link = $this->getAltLink($entry);
+        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 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 (file)
index 0000000..245a57f
--- /dev/null
@@ -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 (file)
index 0000000..0791c7e
--- /dev/null
@@ -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 (file)
index 0000000..125d13a
--- /dev/null
@@ -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 (file)
index 0000000..8c77222
--- /dev/null
@@ -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 (file)
index 0000000..417d549
--- /dev/null
@@ -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 (file)
index 0000000..16d27f8
--- /dev/null
@@ -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/OStatus/locale/OStatus.po b/plugins/OStatus/locale/OStatus.po
new file mode 100644 (file)
index 0000000..dedc018
--- /dev/null
@@ -0,0 +1,104 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: tests/gettext-speedtest.php:57 FeedSubPlugin.php:76
+msgid "Feeds"
+msgstr ""
+
+#: FeedSubPlugin.php:77
+msgid "Feed subscription options"
+msgstr ""
+
+#: feedmunger.php:215
+#, php-format
+msgid "New post: \"%1$s\" %2$s"
+msgstr ""
+
+#: actions/feedsubsettings.php:41
+msgid "Feed subscriptions"
+msgstr ""
+
+#: actions/feedsubsettings.php:52
+msgid ""
+"You can subscribe to feeds from other sites; updates will appear in your "
+"personal timeline."
+msgstr ""
+
+#: actions/feedsubsettings.php:96
+msgid "Subscribe"
+msgstr ""
+
+#: actions/feedsubsettings.php:98
+msgid "Continue"
+msgstr ""
+
+#: actions/feedsubsettings.php:151
+msgid "Empty feed URL!"
+msgstr ""
+
+#: actions/feedsubsettings.php:161
+msgid "Invalid URL or could not reach server."
+msgstr ""
+
+#: actions/feedsubsettings.php:164
+msgid "Cannot read feed; server returned error."
+msgstr ""
+
+#: actions/feedsubsettings.php:167
+msgid "Cannot read feed; server returned an empty page."
+msgstr ""
+
+#: actions/feedsubsettings.php:170
+msgid "Bad HTML, could not find feed link."
+msgstr ""
+
+#: actions/feedsubsettings.php:173
+msgid "Could not find a feed linked from this URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:176
+msgid "Not a recognized feed type."
+msgstr ""
+
+#: actions/feedsubsettings.php:180
+msgid "Bad feed URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:188
+msgid "Feed is not PuSH-enabled; cannot subscribe."
+msgstr ""
+
+#: actions/feedsubsettings.php:208
+msgid "Feed subscription failed! Bad response from hub."
+msgstr ""
+
+#: actions/feedsubsettings.php:218
+msgid "Already subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:220
+msgid "Feed subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:222
+msgid "Feed subscription failed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:231
+msgid "Previewing feed:"
+msgstr ""
diff --git a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
new file mode 100644 (file)
index 0000000..f17dfa5
--- /dev/null
@@ -0,0 +1,106 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 14:14-0800\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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: FeedSubPlugin.php:77
+msgid "Feeds"
+msgstr "Flux"
+
+#: FeedSubPlugin.php:78
+msgid "Feed subscription options"
+msgstr "Préférences pour abonnement flux"
+
+#: feedmunger.php:215
+#, php-format
+msgid "New post: \"%1$s\" %2$s"
+msgstr "Nouveau: \"%1$s\" %2$s"
+
+#: actions/feedsubsettings.php:41
+msgid "Feed subscriptions"
+msgstr "Abonnements aux fluxes"
+
+#: actions/feedsubsettings.php:52
+msgid ""
+"You can subscribe to feeds from other sites; updates will appear in your "
+"personal timeline."
+msgstr ""
+"Abonner aux fluxes RSS ou Atom des autres sites web; les temps se trouverair"
+"en votre flux personnel."
+
+#: actions/feedsubsettings.php:96
+msgid "Subscribe"
+msgstr "Abonner"
+
+#: actions/feedsubsettings.php:98
+msgid "Continue"
+msgstr "Prochaine"
+
+#: actions/feedsubsettings.php:151
+msgid "Empty feed URL!"
+msgstr ""
+
+#: actions/feedsubsettings.php:161
+msgid "Invalid URL or could not reach server."
+msgstr ""
+
+#: actions/feedsubsettings.php:164
+msgid "Cannot read feed; server returned error."
+msgstr ""
+
+#: actions/feedsubsettings.php:167
+msgid "Cannot read feed; server returned an empty page."
+msgstr ""
+
+#: actions/feedsubsettings.php:170
+msgid "Bad HTML, could not find feed link."
+msgstr ""
+
+#: actions/feedsubsettings.php:173
+msgid "Could not find a feed linked from this URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:176
+msgid "Not a recognized feed type."
+msgstr ""
+
+#: actions/feedsubsettings.php:180
+msgid "Bad feed URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:188
+msgid "Feed is not PuSH-enabled; cannot subscribe."
+msgstr ""
+
+#: actions/feedsubsettings.php:208
+msgid "Feed subscription failed! Bad response from hub."
+msgstr ""
+
+#: actions/feedsubsettings.php:218
+msgid "Already subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:220
+msgid "Feed subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:222
+msgid "Feed subscription failed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:231
+msgid "Previewing feed:"
+msgstr ""
diff --git a/plugins/OStatus/tests/FeedDiscoveryTest.php b/plugins/OStatus/tests/FeedDiscoveryTest.php
new file mode 100644 (file)
index 0000000..1c52497
--- /dev/null
@@ -0,0 +1,111 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+    print "This script must be run from the command line\n";
+    exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+define('STATUSNET', true);
+define('LACONICA', true);
+
+require_once INSTALLDIR . '/lib/common.php';
+require_once INSTALLDIR . '/plugins/FeedSub/feedsub.php';
+
+class FeedDiscoveryTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider provider
+     *
+     */
+    public function testProduction($url, $html, $expected)
+    {
+        $sub = new FeedDiscovery();
+        $url = $sub->discoverFromHTML($url, $html);
+        $this->assertEquals($expected, $url);
+    }
+
+    static public function provider()
+    {
+        $sampleHeader = <<<END
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head profile="http://gmpg.org/xfn/11">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>leŭksman  </title>
+
+<meta name="generator" content="WordPress 2.8.6" /> <!-- leave this for stats -->
+
+<link rel="stylesheet" href="http://leuksman.com/log/wp-content/themes/leuksman/style.css" type="text/css" media="screen" />
+<link rel="alternate" type="application/rss+xml" title="leŭksman RSS Feed" href="http://leuksman.com/log/feed/" />
+<link rel="pingback" href="http://leuksman.com/log/xmlrpc.php" />
+
+<meta name="viewport" content="width = 640" />
+
+<xmeta name="viewport" content="initial-scale=2.3, user-scalable=no" />
+
+<style type="text/css" media="screen">
+
+       #page { background: url("http://leuksman.com/log/wp-content/themes/leuksman/images/kubrickbg.jpg") repeat-y top; border: none; }
+
+</style>
+
+<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://leuksman.com/log/xmlrpc.php?rsd" />
+<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://leuksman.com/log/wp-includes/wlwmanifest.xml" /> 
+<link rel='index' title='leŭksman' href='http://leuksman.com/log' />
+<meta name="generator" content="WordPress 2.8.6" />
+</head>
+<body>
+</body>
+</html>
+END;
+        return array(
+                     array('http://example.com/',
+                           '<html><link rel="alternate" href="http://example.com/feed/rss" type="application/rss+xml">',
+                           'http://example.com/feed/rss'),
+                     array('http://example.com/atom',
+                           '<html><link rel="alternate" href="http://example.com/feed/atom" type="application/atom+xml">',
+                           'http://example.com/feed/atom'),
+                     array('http://example.com/empty',
+                           '<html><link rel="alternate" href="http://example.com/index.pdf" type="application/pdf">',
+                           false),
+                     array('http://example.com/tagsoup',
+                           '<body><pre><LINK rel=alternate hRef=http://example.com/feed/rss type=application/rss+xml><fnork',
+                           'http://example.com/feed/rss'),
+                     // 'rel' attribute must be lowercase, alone per http://www.rssboard.org/rss-autodiscovery
+                     array('http://example.com/tagsoup2',
+                           '<body><pre><LINK rel=" feeders    alternate 467" hRef=http://example.com/feed/rss type=application/rss+xml><fnork',
+                           false),
+                     array('http://example.com/tagsoup3',
+                           '<body><pre><LINK rel=ALTERNATE hRef=http://example.com/feed/rss type=application/rss+xml><fnork',
+                           false),
+                     array('http://example.com/relative/link1',
+                           '<html><link rel="alternate" href="/feed/rss" type="application/rss+xml">',
+                           'http://example.com/feed/rss'),
+                     array('http://example.com/relative/link2',
+                           '<html><link rel="alternate" href="../feed/rss" type="application/rss+xml">',
+                           'http://example.com/feed/rss'),
+                     array('http://example.com/relative/link3',
+                           '<html><link rel="alternate" href="http:/feed/rss" type="application/rss+xml">',
+                           'http://example.com/feed/rss'),
+                     array('http://example.com/base/link1',
+                           '<html><link rel="alternate" href="/feed/rss" type="application/rss+xml"><base href="http://target.example.com/">',
+                           'http://target.example.com/feed/rss'),
+                     array('http://example.com/base/link2',
+                           '<html><link rel="alternate" href="feed/rss" type="application/rss+xml"><base href="http://target.example.com/">',
+                           'http://target.example.com/feed/rss'),
+                     array('http://example.com/base/link3',
+                           '<html><link rel="alternate" href="http:/feed/rss" type="application/rss+xml"><base href="http://target.example.com/">',
+                           'http://target.example.com/feed/rss'),
+                     // Trick question! There's a <base> but no href on it
+                     array('http://example.com/relative/fauxbase',
+                           '<html><link rel="alternate" href="../feed/rss" type="application/rss+xml"><base target="top">',
+                           'http://example.com/feed/rss'),
+                     // Actual WordPress blog header example
+                     array('http://leuksman.com/log/',
+                           $sampleHeader,
+                           'http://leuksman.com/log/feed/'));
+    }
+}
diff --git a/plugins/OStatus/tests/FeedMungerTest.php b/plugins/OStatus/tests/FeedMungerTest.php
new file mode 100644 (file)
index 0000000..0ce24c9
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+    print "This script must be run from the command line\n";
+    exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+define('STATUSNET', true);
+define('LACONICA', true);
+
+require_once INSTALLDIR . '/lib/common.php';
+require_once INSTALLDIR . '/plugins/FeedSub/feedsub.php';
+
+require_once 'XML/Feed/Parser.php';
+
+class FeedMungerTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider profileProvider
+     *
+     */
+    public function testProfiles($xml, $expected)
+    {
+        $feed = new XML_Feed_Parser($xml, false, false, true);
+        
+        $munger = new FeedMunger($feed);
+        $profile = $munger->profile();
+
+        foreach ($expected as $field => $val) {
+            $this->assertEquals($expected[$field], $profile->$field, "profile->$field");
+        }
+    }
+
+    static public function profileProvider()
+    {
+        return array(
+                     array(self::samplefeed(),
+                           array('nickname' => 'leŭksman', // @todo does this need to be asciified?
+                                 'fullname' => 'leŭksman',
+                                 'bio' => 'reticula, electronica, & oddities',
+                                 'homepage' => 'http://leuksman.com/log')));
+    }
+
+    /**
+     * @dataProvider noticeProvider
+     *
+     */
+    public function testNotices($xml, $entryIndex, $expected)
+    {
+        $feed = new XML_Feed_Parser($xml, false, false, true);
+        $entry = $feed->getEntryByOffset($entryIndex);
+
+        $munger = new FeedMunger($feed);
+        $notice = $munger->noticeFromEntry($entry);
+
+        $this->assertTrue(mb_strlen($notice) <= Notice::maxContent());
+        $this->assertEquals($expected, $notice);
+    }
+
+    static public function noticeProvider()
+    {
+        return array(
+                     array('<rss version="2.0"><channel><item><title>A fairly short title</title><link>http://example.com/short/link</link></item></channel></rss>', 0,
+                           'New post: "A fairly short title" http://example.com/short/link'),
+                     // Requires URL shortening ...
+                     array('<rss version="2.0"><channel><item><title>A fairly short title</title><link>http://example.com/but/a/very/long/link/indeed/this/is/far/too/long/for/mere/humans/to/comprehend/oh/my/gosh</link></item></channel></rss>', 0,
+                           'New post: "A fairly short title" http://ur1.ca/g2o1'),
+                     array('<rss version="2.0"><channel><item><title>A fairly long title in this case, which will have to get cut down at some point alongside its very long link. Really who even makes titles this long? It\'s just ridiculous imo...</title><link>http://example.com/but/a/very/long/link/indeed/this/is/far/too/long/for/mere/humans/to/comprehend/oh/my/gosh</link></item></channel></rss>', 0,
+                           'New post: "A fairly long title in this case, which will have to get cut down at some point alongside its very long li…" http://ur1.ca/g2o1'),
+                     // Some real sample feeds
+                     array(self::samplefeed(), 0,
+                           'New post: "Compiling PHP on Snow Leopard" http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/'),
+                     array(self::samplefeedBlogspot(), 0,
+                           'New post: "I love posting" http://briontest.blogspot.com/2009/11/i-love-posting.html'),
+                     array(self::samplefeedBlogspot(), 1,
+                           'New post: "Hey dude" http://briontest.blogspot.com/2009/11/hey-dude.html'),
+        );
+    }
+
+    static protected function samplefeed()
+    {
+        $xml = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+        $samplefeed = $xml . <<<END
+<rss version="2.0"
+       xmlns:content="http://purl.org/rss/1.0/modules/content/"
+       xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+       xmlns:dc="http://purl.org/dc/elements/1.1/"
+       xmlns:atom="http://www.w3.org/2005/Atom"
+       xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+       xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+       >
+
+<channel>
+       <title>leŭksman</title>
+       <atom:link href="http://leuksman.com/log/feed/" rel="self" type="application/rss+xml" />
+       <link>http://leuksman.com/log</link>
+       <description>reticula, electronica, &#38; oddities</description>
+
+       <lastBuildDate>Thu, 12 Nov 2009 17:44:42 +0000</lastBuildDate>
+       <generator>http://wordpress.org/?v=2.8.6</generator>
+       <language>en</language>
+       <sy:updatePeriod>hourly</sy:updatePeriod>
+       <sy:updateFrequency>1</sy:updateFrequency>
+                       <item>
+
+               <title>Compiling PHP on Snow Leopard</title>
+               <link>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/</link>
+               <comments>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/#comments</comments>
+               <pubDate>Thu, 12 Nov 2009 17:44:42 +0000</pubDate>
+               <dc:creator>brion</dc:creator>
+                               <category><![CDATA[apple]]></category>
+
+               <category><![CDATA[devel]]></category>
+
+               <guid isPermaLink="false">http://leuksman.com/log/?p=649</guid>
+               <description><![CDATA[If you&#8217;ve been having trouble compiling your own PHP installations on Mac OS X 10.6, here&#8217;s the secret to making it not suck! After running the configure script, edit the generated Makefile and make these fixes:
+
+Find the EXTRA_LIBS definition and add -lresolv to the end
+Find the EXE_EXT definition and remove .dSYM
+
+Standard make and make install [...]]]></description>
+                       <content:encoded><![CDATA[<p>If you&#8217;ve been having trouble compiling your own PHP installations on Mac OS X 10.6, here&#8217;s the secret to making it not suck! After running the configure script, edit the generated Makefile and make these fixes:</p>
+<ul>
+<li>Find the <strong>EXTRA_LIBS</strong> definition and add <strong>-lresolv</strong> to the end</li>
+<li>Find the <strong>EXE_EXT</strong> definition and remove <strong>.dSYM</strong></li>
+</ul>
+<p>Standard make and make install should work from here&#8230;</p>
+<p>For reference, here&#8217;s the whole configure line I currently use; MySQL is installed from the downloadable installer; other deps from MacPorts:</p>
+<p>&#8216;./configure&#8217; &#8216;&#8211;prefix=/opt/php52&#8242; &#8216;&#8211;with-mysql=/usr/local/mysql&#8217; &#8216;&#8211;with-zlib&#8217; &#8216;&#8211;with-bz2&#8242; &#8216;&#8211;enable-mbstring&#8217; &#8216;&#8211;enable-exif&#8217; &#8216;&#8211;enable-fastcgi&#8217; &#8216;&#8211;with-xmlrpc&#8217; &#8216;&#8211;with-xsl&#8217; &#8216;&#8211;with-readline=/opt/local&#8217; &#8211;without-iconv &#8211;with-gd &#8211;with-png-dir=/opt/local &#8211;with-jpeg-dir=/opt/local &#8211;with-curl &#8211;with-gettext=/opt/local &#8211;with-mysqli=/usr/local/mysql/bin/mysql_config &#8211;with-tidy=/opt/local &#8211;enable-pcntl &#8211;with-openssl</p>
+]]></content:encoded>
+                       <wfw:commentRss>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/feed/</wfw:commentRss>
+               <slash:comments>0</slash:comments>
+               </item>
+</channel>
+</rss>
+END;
+        return $samplefeed;
+    }
+    
+    static protected function samplefeedBlogspot()
+    {
+        return <<<END
+<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-7780083508531697167</id><updated>2009-11-19T12:56:11.233-08:00</updated><title type='text'>Brion's Cool Test Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7780083508531697167.post-8456671879000290677</id><published>2009-11-19T12:55:00.000-08:00</published><updated>2009-11-19T12:56:11.241-08:00</updated><title type='text'>I love posting</title><content type='html'>It's pretty awesome, if you like that sort of thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7780083508531697167-8456671879000290677?l=briontest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/8456671879000290677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://briontest.blogspot.com/2009/11/i-love-posting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8456671879000290677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8456671879000290677'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/2009/11/i-love-posting.html' title='I love posting'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05912464053145602436'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7780083508531697167.post-8202296917897346633</id><published>2009-11-18T13:52:00.001-08:00</published><updated>2009-11-18T13:52:48.444-08:00</updated><title type='text'>Hey dude</title><content type='html'>testingggggggggg&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7780083508531697167-8202296917897346633?l=briontest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/8202296917897346633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://briontest.blogspot.com/2009/11/hey-dude.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8202296917897346633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8202296917897346633'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/2009/11/hey-dude.html' title='Hey dude'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05912464053145602436'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>
+END;
+    }
+}
diff --git a/plugins/OStatus/tests/gettext-speedtest.php b/plugins/OStatus/tests/gettext-speedtest.php
new file mode 100644 (file)
index 0000000..8bbdf5e
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+    print "This script must be run from the command line\n";
+    exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+define('STATUSNET', true);
+define('LACONICA', true);
+
+require_once INSTALLDIR . '/scripts/commandline.inc';
+require_once INSTALLDIR . '/extlib/php-gettext/gettext.inc';
+
+common_init_locale("en_US");
+common_init_locale('fr');
+
+
+putenv("LANG=fr");
+putenv("LANGUAGE=fr");
+setlocale('fr.utf8');
+_setlocale('fr.utf8');
+
+_bindtextdomain("statusnet", INSTALLDIR . '/locale');
+_bindtextdomain("FeedSub", INSTALLDIR . '/plugins/FeedSub/locale');
+
+$times = 10000;
+$delta = array();
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = _("Send");
+}
+$delta["_"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = __("Send");
+}
+$delta["__"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = dgettext("FeedSub", "Feeds");
+}
+$delta["dgettext"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = _dgettext("FeedSub", "Feeds");
+}
+$delta["_dgettext"] = array((microtime(true) - $start) / $times, $result);
+
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = _m("Feeds");
+}
+$delta["_m"] = array((microtime(true) - $start) / $times, $result);
+
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+    $result = fake("Feeds");
+}
+$delta["fake"] = array((microtime(true) - $start) / $times, $result);
+
+foreach ($delta as $func => $bits) {
+    list($time, $result) = $bits;
+    $ms = $time * 1000.0;
+    printf("%10s %2.4fms %s\n", $func, $ms, $result);
+}
+
+
+function fake($str) {
+    return $str;
+}
+
index 7adea45a08825e4c4786baa4a61cafd0555b4b52..0f7a680d73c8e41d9aa6e509cb0188765abe5c60 100644 (file)
@@ -130,7 +130,7 @@ RealtimeUpdate = {
           user = data['user'];
           html = data['html'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
           source = data['source'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
-
+console.log(data);
           ni = "<li class=\"hentry notice\" id=\"notice-"+unique+"\">"+
                "<div class=\"entry-title\">"+
                "<span class=\"vcard author\">"+
@@ -209,10 +209,10 @@ RealtimeUpdate = {
           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>";
 
index 36732ce46a528f4defba455cf11aa6cd753ed544..bff657eb68c023cab98d805b5b30eb3fe87b4ba7 100755 (executable)
@@ -2,7 +2,7 @@
 <?php
 /**
  * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008-2010, StatusNet, Inc.
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
@@ -262,7 +262,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
             $notice->is_local   = Notice::GATEWAY;
 
             if (Event::handle('StartNoticeSave', array(&$notice))) {
-                $id = $notice->insert();
+                $notice->insert();
                 Event::handle('EndNoticeSave', array($notice));
             }
 
@@ -270,17 +270,41 @@ class TwitterStatusFetcher extends ParallelizingDaemon
 
         Inbox::insertNotice($flink->user_id, $notice->id);
 
-        $notice->blowCaches();
+        $notice->blowOnInsert();
 
         return $notice;
     }
 
+    /**
+     * Look up a Profile by profileurl field.  Profile::staticGet() was
+     * not working consistently.
+     *
+     * @param string $url the profile url
+     *
+     * @return mixed the first profile with that url, or null
+     */
+
+    function getProfileByUrl($nickname, $profileurl)
+    {
+        $profile = new Profile();
+        $profile->nickname = $nickname;
+        $profile->profileurl = $profileurl;
+        $profile->limit(1);
+
+        if ($profile->find()) {
+            $profile->fetch();
+            return $profile;
+        }
+
+        return null;
+    }
+
     function ensureProfile($user)
     {
         // check to see if there's already a profile for this user
 
         $profileurl = 'http://twitter.com/' . $user->screen_name;
-        $profile = Profile::staticGet('profileurl', $profileurl);
+        $profile = $this->getProfileByUrl($user->screen_name, $profileurl);
 
         if (!empty($profile)) {
             common_debug($this->name() .
@@ -292,6 +316,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
             return $profile->id;
 
         } else {
+
             common_debug($this->name() . ' - Adding profile and remote profile ' .
                          "for Twitter user: $profileurl.");
 
@@ -306,7 +331,11 @@ class TwitterStatusFetcher extends ParallelizingDaemon
             $profile->profileurl = $profileurl;
             $profile->created = common_sql_now();
 
-            $id = $profile->insert();
+            try {
+                $id = $profile->insert();
+            } catch(Exception $e) {
+                common_log(LOG_WARNING, $this->name . ' Couldn\'t insert profile - ' . $e->getMessage());
+            }
 
             if (empty($id)) {
                 common_log_db_error($profile, 'INSERT', __FILE__);
@@ -326,7 +355,11 @@ class TwitterStatusFetcher extends ParallelizingDaemon
                 $remote_pro->uri = $profileurl;
                 $remote_pro->created = common_sql_now();
 
-                $rid = $remote_pro->insert();
+                try {
+                    $rid = $remote_pro->insert();
+                } catch (Exception $e) {
+                    common_log(LOG_WARNING, $this->name() . ' Couldn\'t save remote profile - ' . $e->getMessage());
+                }
 
                 if (empty($rid)) {
                     common_log_db_error($profile, 'INSERT', __FILE__);
@@ -446,7 +479,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
             if ($this->fetchAvatar($url, $filename)) {
                 $this->newAvatar($id, $size, $mediatype, $filename);
             } else {
-                common_log(LOG_WARNING, $this->id() .
+                common_log(LOG_WARNING, $id() .
                            " - Problem fetching Avatar: $url");
             }
         }
@@ -507,7 +540,11 @@ class TwitterStatusFetcher extends ParallelizingDaemon
 
         $avatar->created = common_sql_now();
 
-        $id = $avatar->insert();
+        try {
+            $id = $avatar->insert();
+        } catch (Exception $e) {
+            common_log(LOG_WARNING, $this->name() . ' Couldn\'t insert avatar - ' . $e->getMessage());
+        }
 
         if (empty($id)) {
             common_log_db_error($avatar, 'INSERT', __FILE__);
index 33dfb788bf5d3d27d11b447bbc8644cdf51660a7..2dd815d3ce821eaddf08eb417debab0819b8037f 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008-2010 StatusNet, Inc.
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
@@ -26,62 +26,20 @@ define('TWITTER_SERVICE', 1); // Twitter is foreign_service ID 1
 require_once INSTALLDIR . '/plugins/TwitterBridge/twitterbasicauthclient.php';
 require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
 
-function updateTwitter_user($twitter_id, $screen_name)
-{
-    $uri = 'http://twitter.com/' . $screen_name;
-    $fuser = new Foreign_user();
-
-    $fuser->query('BEGIN');
-
-    // Dropping down to SQL because regular DB_DataObject udpate stuff doesn't seem
-    // to work so good with tables that have multiple column primary keys
-
-    // Any time we update the uri for a forein user we have to make sure there
-    // are no dupe entries first -- unique constraint on the uri column
-
-    $qry = 'UPDATE foreign_user set uri = \'\' WHERE uri = ';
-    $qry .= '\'' . $uri . '\'' . ' AND service = ' . TWITTER_SERVICE;
-
-    $fuser->query($qry);
-
-    // Update the user
-
-    $qry = 'UPDATE foreign_user SET nickname = ';
-    $qry .= '\'' . $screen_name . '\'' . ', uri = \'' . $uri . '\' ';
-    $qry .= 'WHERE id = ' . $twitter_id . ' AND service = ' . TWITTER_SERVICE;
-
-    $fuser->query('COMMIT');
-
-    $fuser->free();
-    unset($fuser);
-
-    return true;
-}
-
 function add_twitter_user($twitter_id, $screen_name)
 {
-
-    $new_uri = 'http://twitter.com/' . $screen_name;
-
     // Clear out any bad old foreign_users with the new user's legit URL
     // This can happen when users move around or fakester accounts get
     // repoed, and things like that.
 
-    $luser = new Foreign_user();
-    $luser->uri = $new_uri;
-    $luser->service = TWITTER_SERVICE;
+    $luser = Foreign_user::getForeignUser($twitter_id, TWITTER_SERVICE);
     $result = $luser->delete();
 
-    if (empty($result)) {
-        common_log(LOG_WARNING,
-            "Twitter bridge - removed invalid Twitter user squatting on uri: $new_uri");
+    if ($result != false) {
+        common_log(LOG_INFO,
+            "Twitter bridge - removed old Twitter user: $screen_name ($twitter_id).");
     }
 
-    $luser->free();
-    unset($luser);
-
-    // Otherwise, create a new Twitter user
-
     $fuser = new Foreign_user();
 
     $fuser->nickname = $screen_name;
@@ -96,7 +54,8 @@ function add_twitter_user($twitter_id, $screen_name)
             "Twitter bridge - failed to add new Twitter user: $twitter_id - $screen_name.");
         common_log_db_error($fuser, 'INSERT', __FILE__);
     } else {
-        common_debug("Twitter bridge - Added new Twitter user: $screen_name ($twitter_id).");
+        common_log(LOG_INFO,
+                   "Twitter bridge - Added new Twitter user: $screen_name ($twitter_id).");
     }
 
     return $result;
@@ -105,7 +64,6 @@ function add_twitter_user($twitter_id, $screen_name)
 // Creates or Updates a Twitter user
 function save_twitter_user($twitter_id, $screen_name)
 {
-
     // Check to see whether the Twitter user is already in the system,
     // and update its screen name and uri if so.
 
@@ -115,25 +73,20 @@ function save_twitter_user($twitter_id, $screen_name)
 
         $result = true;
 
-        // Only update if Twitter screen name has changed
+        // Delete old record if Twitter user changed screen name
 
         if ($fuser->nickname != $screen_name) {
-            $result = updateTwitter_user($twitter_id, $screen_name);
-
-            common_debug('Twitter bridge - Updated nickname (and URI) for Twitter user ' .
-                "$fuser->id to $screen_name, was $fuser->nickname");
+            $oldname = $fuser->nickname;
+            $fuser->delete();
+            common_log(LOG_INFO, sprintf('Twitter bridge - Updated nickname (and URI) ' .
+                                         'for Twitter user %1$d - %2$s, was %3$s.',
+                                         $fuser->id,
+                                         $screen_name,
+                                         $oldname));
         }
-
-        return $result;
-
-    } else {
-        return add_twitter_user($twitter_id, $screen_name);
     }
 
-    $fuser->free();
-    unset($fuser);
-
-    return true;
+    return add_twitter_user($twitter_id, $screen_name);
 }
 
 function is_twitter_bound($notice, $flink) {
@@ -295,8 +248,17 @@ function format_status($notice)
     $statustxt = preg_replace('/^@/', ' @', $notice->content);
 
     // Convert !groups to #hashes
+
+    // XXX: Make this an optional setting?
+
     $statustxt = preg_replace('/(^|\s)!([A-Za-z0-9]{1,64})/', "\\1#\\2", $statustxt);
 
+    if (mb_strlen($statustxt) > 140) {
+        $noticeUrl = common_shorten_url($notice->uri);
+        $urlLen = mb_strlen($noticeUrl);
+        $statustxt = mb_substr($statustxt, 0, 140 - ($urlLen + 3)) . ' … ' . $noticeUrl;
+    }
+
     return $statustxt;
 }
 
index b2657ff61fb0bbd220e71105139b8cc1c51fd96d..c154932bbc003bdac3cabd62604c9ef714800f5e 100644 (file)
@@ -56,6 +56,7 @@ class TwitterauthorizationAction extends Action
     var $tw_fields    = null;
     var $access_token = null;
     var $signin       = null;
+    var $verifier     = null;
 
     /**
      * Initialize class members. Looks for 'oauth_token' parameter.
@@ -70,6 +71,7 @@ class TwitterauthorizationAction extends Action
 
         $this->signin      = $this->boolean('signin');
         $this->oauth_token = $this->arg('oauth_token');
+        $this->verifier    = $this->arg('oauth_verifier');
 
         return true;
     }
@@ -89,11 +91,15 @@ class TwitterauthorizationAction extends Action
             $user  = common_current_user();
             $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
 
-            // If there's already a foreign link record, it means we already
-            // have an access token, and this is unecessary. So go back.
+            // If there's already a foreign link record and a foreign user
+            // it means the accounts are already linked, and this is unecessary.
+            // So go back.
 
             if (isset($flink)) {
-                common_redirect(common_local_url('twittersettings'));
+                $fuser = $flink->getForeignUser();
+                if (!empty($fuser)) {
+                    common_redirect(common_local_url('twittersettings'));
+                }
             }
         }
 
@@ -156,8 +162,7 @@ class TwitterauthorizationAction extends Action
             // Get a new request token and authorize it
 
             $client  = new TwitterOAuthClient();
-            $req_tok =
-              $client->getRequestToken(TwitterOAuthClient::$requestTokenURL);
+            $req_tok = $client->getRequestToken();
 
             // Sock the request token away in the session temporarily
 
@@ -167,7 +172,7 @@ class TwitterauthorizationAction extends Action
             $auth_link = $client->getAuthorizeLink($req_tok, $this->signin);
 
         } catch (OAuthClientException $e) {
-            $msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s',
+            $msg = sprintf('OAuth client error - code: %1s, msg: %2s',
                            $e->getCode(), $e->getMessage());
             $this->serverError(_m('Couldn\'t link your Twitter account.'));
         }
@@ -183,7 +188,6 @@ class TwitterauthorizationAction extends Action
      */
     function saveAccessToken()
     {
-
         // Check to make sure Twitter returned the same request
         // token we sent them
 
@@ -200,7 +204,7 @@ class TwitterauthorizationAction extends Action
 
             // Exchange the request token for an access token
 
-            $atok = $client->getAccessToken(TwitterOAuthClient::$accessTokenURL);
+            $atok = $client->getAccessToken($this->verifier);
 
             // Test the access token and get the user's Twitter info
 
@@ -219,7 +223,7 @@ class TwitterauthorizationAction extends Action
 
             $user = common_current_user();
             $this->saveForeignLink($user->id, $twitter_user->id, $atok);
-            save_twitter_user($twitter_user->id, $twitter_user->name);
+            save_twitter_user($twitter_user->id, $twitter_user->screen_name);
 
         } else {
 
@@ -254,6 +258,10 @@ class TwitterauthorizationAction extends Action
     {
         $flink = new Foreign_link();
 
+        $flink->user_id = $user_id;
+        $flink->service = TWITTER_SERVICE;
+        $flink->delete(); // delete stale flink, if any
+
         $flink->user_id     = $user_id;
         $flink->foreign_id  = $twuid;
         $flink->service     = TWITTER_SERVICE;
index 277e7ab409c69b76598e5a72a093274f263c3d49..ba45b533dc9b50fdf4a72075948dadeba14693cd 100644 (file)
@@ -91,6 +91,19 @@ class TwitterOAuthClient extends OAuthClient
         }
     }
 
+    /**
+     * Gets a request token from Twitter
+     *
+     * @return OAuthToken $token the request token
+     */
+    function getRequestToken()
+    {
+        return parent::getRequestToken(
+            self::$requestTokenURL,
+            common_local_url('twitterauthorization')
+        );
+    }
+
     /**
      * Builds a link to Twitter's endpoint for authorizing a request token
      *
@@ -107,6 +120,21 @@ class TwitterOAuthClient extends OAuthClient
                                         common_local_url('twitterauthorization'));
     }
 
+    /**
+     * Fetches an access token from Twitter
+     *
+     * @param string $verifier 1.0a verifier
+     *
+     * @return OAuthToken $token the access token
+     */
+    function getAccessToken($verifier = null)
+    {
+        return parent::getAccessToken(
+            self::$accessTokenURL,
+            $verifier
+        );
+    }
+
     /**
      * Calls Twitter's /account/verify_credentials API method
      *
index 702c1e3d67b9f8e3339e14179e257cf67bd730c1..0fb75daa03fd256c4571a60a230337d657cd1906 100644 (file)
 
 define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
 
-$shortoptions = "t:c:v:k:";
+$shortoptions = "t:l:v:k:";
 
-$helptext = <<<ENDOFHELP
+$helptext = <<<END_OF_CLEARCACHE_HELP
 USAGE: clearcache.php <args>
 clears the cached object based on the args
 
   -t table     Table to look up
-  -c column    Column to look up, default "id"
+  -l column    Column to look up, default "id"
   -v value     Value to look up
   -k key       Key to look up; other args are ignored
 
-ENDOFHELP;
+END_OF_CLEARCACHE_HELP;
 
 require_once INSTALLDIR.'/scripts/commandline.inc';
 
-$karg = get_option_value('k');
+$karg = get_option_value('k', 'key');
 
 if (!empty($karg)) {
     $k = common_cache_key($karg);
 } else {
-    $table = get_option_value('t');
+    $table = get_option_value('t', 'table');
     if (empty($table)) {
         die("No table or key specified\n");
     }
-    $column = get_option_value('c');
+    $column = get_option_value('l', 'column');
     if (empty($column)) {
         $column = 'id';
     }
-    $value = get_option_value('v');
+    $value = get_option_value('v', 'value');
 
     $k = Memcached_DataObject::cacheKey($table, $column, $value);
 }
index 7cabd78adaa5f09681be909011835d6036854d1a..094bdb5aa00bd8e7f16d0938e57d51e49f61abf3 100644 (file)
@@ -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();
index 4ad808011c8c5f8a89ebb97bd3142aba0cccfbb3..89d15415f960bd6d2e87b49f2fe2bf1444835f26 100755 (executable)
@@ -13,6 +13,11 @@ export sitename="$2"
 export tags="$3"
 export email="$4"
 export fullname="$5"
+export siteplan="$6"
+
+if [ "$siteplan" == '' ]; then
+    siteplan='single-user'
+fi
 
 # Fixme: if this is changed later we need to update profile URLs
 # for the created user.
@@ -71,6 +76,7 @@ then
       sed "s/\$nickname/$nickname/" | \
       sed "s/\$sitename/$sitename/" | \
       sed "s/\$userpass/$userpass/" | \
+      sed "s/\$siteplan/$siteplan/" | \
       php $PHPBASE/scripts/sendemail.php \
         -s"$server" \
         -n"$nickname" \
index f179795728dca051786df453e3c84dcf6a897baa..93b57a484b20be47c3c2f5fe1326cf8676604604 100644 (file)
 
 define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
 
-$shortoptions = "t:c:v:k:";
+$shortoptions = "t:l:v:k:";
 
 $helptext = <<<ENDOFHELP
 USAGE: showcache.php <args>
 shows the cached object based on the args
 
   -t table     Table to look up
-  -c column    Column to look up, default "id"
+  -l column    Column to look up, default "id"
   -v value     Value to look up
   -k key       Key to look up; other args are ignored
 
@@ -44,7 +44,7 @@ if (!empty($karg)) {
     if (empty($table)) {
         die("No table or key specified\n");
     }
-    $column = get_option_value('c');
+    $column = get_option_value('l');
     if (empty($column)) {
         $column = 'id';
     }
diff --git a/scripts/updateprofileurl.php b/scripts/updateprofileurl.php
new file mode 100644 (file)
index 0000000..2fc6828
--- /dev/null
@@ -0,0 +1,99 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 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/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'i:n:a';
+$longoptions = array('id=', 'nickname=', 'all');
+
+$helptext = <<<END_OF_UPDATEPROFILEURL_HELP
+updateprofileurl.php [options]
+update the URLs of all avatars in the system
+
+  -i --id       ID of user to update
+  -n --nickname nickname of the user to update
+  -a --all      update all
+
+END_OF_UPDATEPROFILEURL_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+try {
+    $user = null;
+
+    if (have_option('i', 'id')) {
+        $id = get_option_value('i', 'id');
+        $user = User::staticGet('id', $id);
+        if (empty($user)) {
+            throw new Exception("Can't find user with id '$id'.");
+        }
+        updateProfileURL($user);
+    } else if (have_option('n', 'nickname')) {
+        $nickname = get_option_value('n', 'nickname');
+        $user = User::staticGet('nickname', $nickname);
+        if (empty($user)) {
+            throw new Exception("Can't find user with nickname '$nickname'");
+        }
+        updateProfileURL($user);
+    } else if (have_option('a', 'all')) {
+        $user = new User();
+        if ($user->find()) {
+            while ($user->fetch()) {
+                updateProfileURL($user);
+            }
+        }
+    } else {
+        show_help();
+        exit(1);
+    }
+} catch (Exception $e) {
+    print $e->getMessage()."\n";
+    exit(1);
+}
+
+function updateProfileURL($user)
+{
+    $profile = $user->getProfile();
+
+    if (empty($profile)) {
+        throw new Exception("Can't find profile for user $user->nickname ($user->id)");
+    }
+
+    $orig = clone($profile);
+
+    $profile->profileurl = common_profile_url($user->nickname);
+
+    if (!have_option('q', 'quiet')) {
+        print "Updating profile url for $user->nickname ($user->id) ".
+          "from $orig->profileurl to $profile->profileurl...";
+    }
+
+    $result = $profile->update($orig);
+
+    if (!$result) {
+        print "FAIL.\n";
+        common_log_db_error($profile, 'UPDATE', __FILE__);
+        throw new Exception("Can't update profile for user $user->nickname ($user->id)");
+    }
+
+    common_broadcast_profile($profile);
+
+    print "OK.\n";
+}
index b5cfab7e9c7acb0dd1a803ea3a0881ede3ae50e6..3218276a689eba869f69e1f5b577ae73d40ba772 100644 (file)
@@ -1024,6 +1024,7 @@ float:none;
 }
 #content .notice .entry-title {
 margin-left:59px;
+margin-right:7px;
 }
 
 .vcard .url {
@@ -1103,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 {
@@ -1130,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,
@@ -1144,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;
index 01a729c10b92b7669ed745051227990269f70fe2..6f284f023ee7c7c1fef480c26e7ccfd2b27ba32c 100644 (file)
Binary files a/theme/base/images/icons/icons-01.gif and b/theme/base/images/icons/icons-01.gif differ
diff --git a/theme/base/images/icons/twotone/green/against.gif b/theme/base/images/icons/twotone/green/against.gif
new file mode 100644 (file)
index 0000000..ca796c8
Binary files /dev/null and b/theme/base/images/icons/twotone/green/against.gif differ
diff --git a/theme/base/images/icons/twotone/green/checkmark.gif b/theme/base/images/icons/twotone/green/checkmark.gif
new file mode 100644 (file)
index 0000000..892429d
Binary files /dev/null and b/theme/base/images/icons/twotone/green/checkmark.gif differ
index 6954de7bad6a0e8cdda7cb29c3f7a7b5c971801d..a2f10134283210534a36c9f08a13cc25f9fcf31e 100644 (file)
@@ -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] {
@@ -192,7 +195,8 @@ button.minimize,
 .form_reset_key input.submit,
 .entity_clear input.submit,
 .entity_flag input.submit,
-.entity_flag p {
+.entity_flag p,
+.entity_subscribe input.submit {
 background-image:url(../../base/images/icons/icons-01.gif);
 background-repeat:no-repeat;
 background-color:transparent;
@@ -220,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 +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);
@@ -348,6 +354,12 @@ background-position: 5px -2039px;
 .entity_flag p {
 background-position: 5px -2105px;
 }
+.entity_subscribe input.accept {
+background-position: 5px -2171px;
+}
+.entity_subscribe input.reject {
+background-position: 5px -2237px;
+}
 
 /* NOTICES */
 .notice .attachment {
index 9ac2730bdae5c6649d887a302561fd57b84bde2f..e214047451efbd8c79a0f33c98a4f61bd3e86de7 100644 (file)
@@ -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] {
@@ -192,7 +195,8 @@ button.minimize,
 .form_reset_key input.submit,
 .entity_clear input.submit,
 .entity_flag input.submit,
-.entity_flag p {
+.entity_flag p,
+.entity_subscribe input.submit {
 background-image:url(../../base/images/icons/icons-01.gif);
 background-repeat:no-repeat;
 background-color:transparent;
@@ -220,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;
 }
 
@@ -306,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);
@@ -347,6 +353,12 @@ background-position: 5px -2039px;
 .entity_flag p {
 background-position: 5px -2105px;
 }
+.entity_subscribe input.accept {
+background-position: 5px -2171px;
+}
+.entity_subscribe input.reject {
+background-position: 5px -2237px;
+}
 
 /* NOTICES */
 .notice .attachment {