]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge remote branch 'gitorious/0.9.x' into 0.9.x
authorEvan Prodromou <evan@status.net>
Tue, 21 Sep 2010 18:07:48 +0000 (14:07 -0400)
committerEvan Prodromou <evan@status.net>
Tue, 21 Sep 2010 18:07:48 +0000 (14:07 -0400)
273 files changed:
actions/apidirectmessage.php
actions/apigrouplist.php
actions/apigrouplistall.php
actions/apigroupmembership.php
actions/apigroupshow.php
actions/apistatusesshow.php
actions/apisubscriptions.php
actions/apitimelinefavorites.php
actions/apitimelinefriends.php
actions/apitimelinegroup.php
actions/apitimelinehome.php
actions/apitimelinementions.php
actions/apitimelinepublic.php
actions/apitimelinetag.php
actions/apitimelineuser.php
actions/editapplication.php
actions/newapplication.php
actions/oauthconnectionssettings.php
actions/shownotice.php
classes/Notice.php
classes/User.php
db/notice_source.sql
lib/action.php
lib/applicationeditform.php
lib/command.php
lib/dbqueuemanager.php
lib/util.php
locale/af/LC_MESSAGES/statusnet.po
locale/ar/LC_MESSAGES/statusnet.po
locale/arz/LC_MESSAGES/statusnet.po
locale/bg/LC_MESSAGES/statusnet.po
locale/br/LC_MESSAGES/statusnet.po
locale/ca/LC_MESSAGES/statusnet.po
locale/cs/LC_MESSAGES/statusnet.po
locale/da/LC_MESSAGES/statusnet.po
locale/de/LC_MESSAGES/statusnet.po
locale/el/LC_MESSAGES/statusnet.po
locale/en_GB/LC_MESSAGES/statusnet.po
locale/eo/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/gl/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/ka/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.pot
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/APC/APCPlugin.php [new file with mode: 0644]
plugins/APC/locale/APC.pot [new file with mode: 0644]
plugins/APCPlugin.php [deleted file]
plugins/Adsense/AdsensePlugin.php
plugins/Adsense/locale/Adsense.pot
plugins/AutoSandbox/AutoSandboxPlugin.php
plugins/AutoSandbox/locale/AutoSandbox.pot
plugins/Autocomplete/autocomplete.php
plugins/Autocomplete/locale/Autocomplete.pot
plugins/BitlyUrl/locale/BitlyUrl.pot
plugins/Blacklist/BlacklistPlugin.php
plugins/Blacklist/locale/Blacklist.pot
plugins/BlankAd/BlankAdPlugin.php
plugins/BlogspamNet/BlogspamNetPlugin.php [new file with mode: 0644]
plugins/BlogspamNetPlugin.php [deleted file]
plugins/CacheLog/CacheLogPlugin.php [new file with mode: 0644]
plugins/CacheLog/locale/CacheLog.pot [new file with mode: 0644]
plugins/CacheLogPlugin.php [deleted file]
plugins/CasAuthentication/CasAuthenticationPlugin.php
plugins/CasAuthentication/caslogin.php
plugins/CasAuthentication/locale/CasAuthentication.pot
plugins/ClientSideShorten/ClientSideShortenPlugin.php
plugins/ClientSideShorten/locale/ClientSideShorten.pot
plugins/ClientSideShorten/shorten.php
plugins/Comet/CometPlugin.php
plugins/DirectionDetector/DirectionDetectorPlugin.php
plugins/DirectionDetector/jquery.DirectionDetector.js [new file with mode: 0644]
plugins/DirectionDetector/locale/DirectionDetector.pot
plugins/DiskCache/DiskCachePlugin.php [new file with mode: 0644]
plugins/DiskCachePlugin.php [deleted file]
plugins/Disqus/DisqusPlugin.php [new file with mode: 0644]
plugins/Disqus/locale/Disqus.pot [new file with mode: 0644]
plugins/DisqusPlugin.php [deleted file]
plugins/Echo/EchoPlugin.php [new file with mode: 0644]
plugins/Echo/locale/Echo.pot [new file with mode: 0644]
plugins/EchoPlugin.php [deleted file]
plugins/EmailAuthentication/EmailAuthenticationPlugin.php
plugins/EmailAuthentication/locale/EmailAuthentication.pot
plugins/Enjit/enjitqueuehandler.php
plugins/Facebook/FBC_XDReceiver.php
plugins/Facebook/FBConnectAuth.php
plugins/Facebook/FBConnectLogin.php
plugins/Facebook/FBConnectSettings.php
plugins/Facebook/FacebookPlugin.php
plugins/Facebook/facebookaction.php
plugins/Facebook/facebookadminpanel.php
plugins/Facebook/facebookhome.php
plugins/Facebook/facebookinvite.php
plugins/Facebook/facebooklogin.php
plugins/Facebook/facebooknoticeform.php
plugins/Facebook/facebookremove.php
plugins/Facebook/facebooksettings.php
plugins/Facebook/facebookutil.php
plugins/Facebook/locale/Facebook.pot
plugins/FirePHP/FirePHPPlugin.php
plugins/FirePHP/locale/FirePHP.pot
plugins/GeoURL/GeoURLPlugin.php [new file with mode: 0644]
plugins/GeoURL/locale/GeoURL.pot [new file with mode: 0644]
plugins/GeoURLPlugin.php [deleted file]
plugins/Geonames/GeonamesPlugin.php [new file with mode: 0644]
plugins/Geonames/locale/Geonames.pot [new file with mode: 0644]
plugins/GeonamesPlugin.php [deleted file]
plugins/GoogleAnalytics/GoogleAnalyticsPlugin.php [new file with mode: 0644]
plugins/GoogleAnalytics/locale/GoogleAnalytics.pot [new file with mode: 0644]
plugins/GoogleAnalyticsPlugin.php [deleted file]
plugins/Gravatar/GravatarPlugin.php
plugins/Gravatar/README
plugins/Gravatar/locale/Gravatar.pot
plugins/Imap/ImapPlugin.php
plugins/Imap/imapmanager.php
plugins/Imap/locale/Imap.pot
plugins/InfiniteScroll/locale/InfiniteScroll.pot
plugins/LdapAuthentication/locale/LdapAuthentication.pot
plugins/LdapAuthorization/locale/LdapAuthorization.pot
plugins/LdapCommon/LdapCommon.php
plugins/LdapCommon/MemcacheSchemaCache.php
plugins/LilUrl/LilUrlPlugin.php
plugins/LilUrl/locale/LilUrl.pot
plugins/Linkback/LinkbackPlugin.php [new file with mode: 0644]
plugins/Linkback/locale/Linkback.pot [new file with mode: 0644]
plugins/LinkbackPlugin.php [deleted file]
plugins/Mapstraction/MapstractionPlugin.php
plugins/Mapstraction/allmap.php
plugins/Mapstraction/locale/Mapstraction.pot
plugins/Mapstraction/map.php
plugins/Mapstraction/usermap.php
plugins/Memcache/MemcachePlugin.php [new file with mode: 0644]
plugins/Memcache/locale/Memcache.pot [new file with mode: 0644]
plugins/MemcachePlugin.php [deleted file]
plugins/Memcached/MemcachedPlugin.php [new file with mode: 0644]
plugins/Memcached/locale/Memcached.pot [new file with mode: 0644]
plugins/MemcachedPlugin.php [deleted file]
plugins/Meteor/MeteorPlugin.php
plugins/Minify/MinifyPlugin.php
plugins/Minify/locale/Minify.pot
plugins/Minify/minify.php
plugins/MobileProfile/MobileProfilePlugin.php
plugins/MobileProfile/locale/MobileProfile.pot
plugins/NoticeTitle/NoticeTitlePlugin.php
plugins/NoticeTitle/locale/NoticeTitle.pot
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/actions/groupsalmon.php
plugins/OStatus/actions/hostmeta.php
plugins/OStatus/actions/ostatusgroup.php
plugins/OStatus/actions/ostatusinit.php
plugins/OStatus/actions/ostatussub.php
plugins/OStatus/actions/ownerxrd.php
plugins/OStatus/actions/pushcallback.php
plugins/OStatus/actions/pushhub.php
plugins/OStatus/actions/usersalmon.php
plugins/OStatus/actions/userxrd.php
plugins/OStatus/classes/FeedSub.php
plugins/OStatus/classes/HubSub.php
plugins/OStatus/classes/Magicsig.php
plugins/OStatus/classes/Ostatus_profile.php
plugins/OStatus/classes/Ostatus_source.php
plugins/OStatus/lib/discovery.php
plugins/OStatus/lib/discoveryhints.php
plugins/OStatus/lib/linkheader.php
plugins/OStatus/lib/magicenvelope.php
plugins/OStatus/lib/ostatusqueuehandler.php
plugins/OStatus/lib/pushinqueuehandler.php
plugins/OStatus/lib/salmon.php
plugins/OStatus/lib/salmonaction.php
plugins/OStatus/lib/xrd.php
plugins/OStatus/lib/xrdaction.php
plugins/OStatus/locale/OStatus.pot
plugins/OStatus/tests/remote-tests.php
plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php
plugins/OpenExternalLinkTarget/locale/OpenExternalLinkTarget.pot
plugins/OpenID/locale/OpenID.pot
plugins/PiwikAnalytics/PiwikAnalyticsPlugin.php [new file with mode: 0644]
plugins/PiwikAnalytics/locale/PiwikAnalytics.pot [new file with mode: 0644]
plugins/PiwikAnalyticsPlugin.php [deleted file]
plugins/PostDebug/locale/PostDebug.pot
plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php
plugins/PoweredByStatusNet/locale/PoweredByStatusNet.pot
plugins/PtitUrl/locale/PtitUrl.pot
plugins/RSSCloud/LoggingAggregator.php
plugins/RSSCloud/RSSCloudNotifier.php
plugins/RSSCloud/RSSCloudPlugin.php
plugins/RSSCloud/RSSCloudQueueHandler.php
plugins/RSSCloud/RSSCloudRequestNotify.php
plugins/RSSCloud/RSSCloudSubscription.php
plugins/RSSCloud/locale/RSSCloud.pot
plugins/Recaptcha/RecaptchaPlugin.php
plugins/Recaptcha/locale/Recaptcha.pot
plugins/RegisterThrottle/RegisterThrottlePlugin.php
plugins/RegisterThrottle/Registration_ip.php
plugins/RegisterThrottle/locale/RegisterThrottle.pot
plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php
plugins/RequireValidatedEmail/locale/RequireValidatedEmail.pot
plugins/ReverseUsernameAuthentication/locale/ReverseUsernameAuthentication.pot
plugins/Sample/SamplePlugin.php
plugins/Sample/User_greeting_count.php
plugins/Sample/hello.php
plugins/Sample/locale/Sample.pot
plugins/SimpleUrl/locale/SimpleUrl.pot
plugins/Spotify/SpotifyPlugin.php [new file with mode: 0644]
plugins/SpotifyPlugin.php [deleted file]
plugins/SubMirror/SubMirrorPlugin.php
plugins/SubMirror/actions/addmirror.php
plugins/SubMirror/actions/basemirror.php
plugins/SubMirror/actions/editmirror.php
plugins/SubMirror/actions/mirrorsettings.php
plugins/SubMirror/classes/SubMirror.php
plugins/SubMirror/lib/addmirrorform.php
plugins/SubMirror/lib/editmirrorform.php
plugins/SubMirror/lib/mirrorqueuehandler.php
plugins/SubMirror/locale/SubMirror.pot
plugins/SubscriptionThrottle/SubscriptionThrottlePlugin.php [new file with mode: 0644]
plugins/SubscriptionThrottle/locale/SubscriptionThrottle.pot [new file with mode: 0644]
plugins/SubscriptionThrottlePlugin.php [deleted file]
plugins/TabFocus/TabFocusPlugin.php
plugins/TabFocus/locale/TabFocus.pot
plugins/Template/TemplatePlugin.php [new file with mode: 0644]
plugins/TemplatePlugin.php [deleted file]
plugins/TightUrl/locale/TightUrl.pot
plugins/TinyMCE/TinyMCEPlugin.php
plugins/TinyMCE/locale/TinyMCE.pot
plugins/TwitterBridge/TwitterBridgePlugin.php
plugins/TwitterBridge/Twitter_synch_status.php
plugins/TwitterBridge/daemons/synctwitterfriends.php
plugins/TwitterBridge/daemons/twitterstatusfetcher.php
plugins/TwitterBridge/locale/TwitterBridge.pot
plugins/TwitterBridge/twitter.php
plugins/TwitterBridge/twitteradminpanel.php
plugins/TwitterBridge/twitterauthorization.php
plugins/TwitterBridge/twitterlogin.php
plugins/TwitterBridge/twitteroauthclient.php
plugins/TwitterBridge/twittersettings.php
plugins/UserLimit/UserLimitPlugin.php [new file with mode: 0644]
plugins/UserLimit/locale/UserLimit.pot [new file with mode: 0644]
plugins/UserLimitPlugin.php [deleted file]
plugins/WikiHashtags/WikiHashtagsPlugin.php [new file with mode: 0644]
plugins/WikiHashtags/locale/WikiHashtags.pot [new file with mode: 0644]
plugins/WikiHashtagsPlugin.php [deleted file]
plugins/WikiHowProfile/WikiHowProfilePlugin.php
plugins/WikiHowProfile/locale/WikiHowProfile.pot
plugins/XCache/XCachePlugin.php [new file with mode: 0644]
plugins/XCache/locale/XCache.pot [new file with mode: 0644]
plugins/XCachePlugin.php [deleted file]
scripts/update_po_templates.php
scripts/update_translations.php

index 7a0f46274cbde24478e222da8bdcbbce2bd50f1a..e7ea38dfa1caad26cd40ed9337044d5243c9589f 100644 (file)
@@ -357,6 +357,7 @@ class ApiDirectMessageAction extends ApiAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       strtotime($this->messages[0]->created),
                       strtotime($this->messages[$last]->created)
index 148c802f43b297ecb952e0ea6b759d466f1e45c4..319a1e424d3c15285df9921ddcdb74a7f1d71fc4 100644 (file)
@@ -213,6 +213,7 @@ class ApiGroupListAction extends ApiBareAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->user->id,
                       strtotime($this->groups[0]->created),
index a8317608d7feed0d8cec4125bbc13f6650f00093..cc7cd901dcfe052c1307e20c061a3a6205758b92 100644 (file)
@@ -204,6 +204,7 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       strtotime($this->groups[0]->created),
                       strtotime($this->groups[$last]->created))
index ffd5c7c7d572ca0226ee9723026362475f839d80..b7f3064b5ad8490fbb3ceaa5e9dd304cef0311ce 100644 (file)
@@ -183,6 +183,7 @@ class ApiGroupMembershipAction extends ApiPrivateAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->group->id,
                       strtotime($this->profiles[0]->created),
index 2998e505e2174325c244e63d730fe02420076bef..9b90e6b3832df6717c2ef7165f778defa9a55f9a 100644 (file)
@@ -149,6 +149,7 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->group->id,
                       strtotime($this->group->modified))
index 476820a43db2216b17421e50c1a21a123c63c538..84f8079db553a906367d6d2e0dff542cf9e16315 100644 (file)
@@ -194,6 +194,7 @@ class ApiStatusesShowAction extends ApiPrivateAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->notice->id,
                       strtotime($this->notice->created))
index 63d65f2893ca51e37002153b9defd2eac4008d53..749d16f0678c7fa246322193d1dc70fbc7d3a7d5 100644 (file)
@@ -181,6 +181,7 @@ class ApiSubscriptionsAction extends ApiBareAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->user->id,
                       isset($this->ids_only) ? 'IDs' : 'Profiles',
index 7228960c0b48bfef8262366987ad7a3954a75407..f5ce5d2fd4d84e8f8111f407cdcfbcfe18d99f4c 100644 (file)
@@ -259,6 +259,7 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->user->id,
                       strtotime($this->notices[0]->created),
index 40ce35979b9005c63f1f1157ff30724cc62f88da..c96391c129e39d23794699a83e30159160db3a3e 100644 (file)
@@ -346,6 +346,7 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
             return '"' . implode(
                                  ':',
                                  array($this->arg('action'),
+                                       common_user_cache_hash($this->auth_user),
                                        common_language(),
                                        $this->user->id,
                                        strtotime($this->notices[0]->created),
index 7a40fd808430b456aaaf5e1f68e586963228a694..5138a4b5e1986210a795907d66364130403d95c3 100644 (file)
@@ -229,6 +229,7 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->group->id,
                       strtotime($this->notices[0]->created),
index 27eb7416915908535e136ef2c6d45b5922c2de47..1ceb3d902b2f8c4bc09b9273fa9b898f264e8b0b 100644 (file)
@@ -254,6 +254,7 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->user->id,
                       strtotime($this->notices[0]->created),
index ed1ad20e3247a3c8198ff9959d6f5ce4654fcedd..354dc58b6869f1fec229796b3133c1d67d17e4e2 100644 (file)
@@ -244,6 +244,7 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->user->id,
                       strtotime($this->notices[0]->created),
index f901642882ee6a1fd7c4933b2e47cb81dfe4ee19..0119b504a7bb34899f9783455107e955e6df974e 100644 (file)
@@ -311,6 +311,7 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       strtotime($this->notices[0]->created),
                       strtotime($this->notices[$last]->created))
index c7ec172aeb1ded71f53e5c86a9237dd8d6b092a8..712703694fbf48652fdfec2592957b2652a5f829 100644 (file)
@@ -232,6 +232,7 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->tag,
                       strtotime($this->notices[0]->created),
index 17a2836639650434feb7c20f50e9decfe8c3d4b1..0c97aad21c107ff318137441b8bea475d7e232a9 100644 (file)
@@ -234,6 +234,7 @@ class ApiTimelineUserAction extends ApiBareAuthAction
             return '"' . implode(
                 ':',
                 array($this->arg('action'),
+                      common_user_cache_hash($this->auth_user),
                       common_language(),
                       $this->user->id,
                       strtotime($this->notices[0]->created),
index 64cf0a5745d134fcceeb7b214844b45dc86111ec..477bcd6f0b25b79649b2994310e5237de065ca02 100644 (file)
@@ -188,7 +188,7 @@ class EditApplicationAction extends OwnerDesignAction
         } elseif (Oauth_application::descriptionTooLong($description)) {
             $this->showForm(sprintf(
                 _('Description is too long (max %d chars).'),
-                                    Oauth_application::maxDescription()));
+                                    Oauth_application::maxDesc()));
             return;
         } elseif (mb_strlen($source_url) > 255) {
             $this->showForm(_('Source URL is too long.'));
@@ -253,7 +253,10 @@ class EditApplicationAction extends OwnerDesignAction
 
         $result = $this->app->update($orig);
 
-        if (!$result) {
+        // Note: 0 means no rows changed, which can happen if the only
+        // thing we changed was the icon, since it's not altered until
+        // the next step.
+        if ($result === false) {
             common_log_db_error($this->app, 'UPDATE', __FILE__);
             $this->serverError(_('Could not update application.'));
         }
index 0f819b3499881795e3ce597fd1559846875f7f15..8b150c315139d8c3fdb446685b05d3313c28684f 100644 (file)
@@ -170,7 +170,7 @@ class NewApplicationAction extends OwnerDesignAction
         } elseif (Oauth_application::descriptionTooLong($description)) {
             $this->showForm(sprintf(
                 _('Description is too long (max %d chars).'),
-                Oauth_application::maxDescription()));
+                Oauth_application::maxDesc()));
             return;
         } elseif (empty($source_url)) {
             $this->showForm(_('Source URL is required.'));
index 8a206d7101372f3dd69dd9c6af9e92ec203b2051..1fa70662fc88690c294abc3ad59fe319c769241b 100644 (file)
@@ -80,7 +80,7 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
 
     function getInstructions()
     {
-        return _('You have allowed the following applications to access you account.');
+        return _('You have allowed the following applications to access your account.');
     }
 
     /**
index 9c5d83441b8688e6ed08b52cf22c9dfdf71f6ba5..86df5f9f30658bdf560ee5be73104e7882639b42 100644 (file)
@@ -151,6 +151,7 @@ class ShownoticeAction extends OwnerDesignAction
           strtotime($this->avatar->modified) : 0;
 
         return 'W/"' . implode(':', array($this->arg('action'),
+                                          common_user_cache_hash(),
                                           common_language(),
                                           $this->notice->id,
                                           strtotime($this->notice->created),
index f1b012465b39cbd2c0766ffe8b211802d4d964b0..13b322828bade789c9c45a3c083d0123b1a8d439 100644 (file)
@@ -753,8 +753,15 @@ class Notice extends Memcached_DataObject
     }
 
     /**
-     * @param $groups array of Group *objects*
-     * @param $recipients array of profile *ids*
+     * Pull up a full list of local recipients who will be getting
+     * this notice in their inbox. Results will be cached, so don't
+     * change the input data wily-nilly!
+     *
+     * @param array $groups optional list of Group objects;
+     *              if left empty, will be loaded from group_inbox records
+     * @param array $recipient optional list of reply profile ids
+     *              if left empty, will be loaded from reply records
+     * @return array associating recipient user IDs with an inbox source constant
      */
     function whoGets($groups=null, $recipients=null)
     {
@@ -787,27 +794,27 @@ class Notice extends Memcached_DataObject
             $ni[$id] = NOTICE_INBOX_SOURCE_SUB;
         }
 
-        $profile = $this->getProfile();
-
         foreach ($groups as $group) {
             $users = $group->getUserMembers();
             foreach ($users as $id) {
                 if (!array_key_exists($id, $ni)) {
-                    $user = User::staticGet('id', $id);
-                    if (!$user->hasBlocked($profile)) {
-                        $ni[$id] = NOTICE_INBOX_SOURCE_GROUP;
-                    }
+                    $ni[$id] = NOTICE_INBOX_SOURCE_GROUP;
                 }
             }
         }
 
         foreach ($recipients as $recipient) {
-
             if (!array_key_exists($recipient, $ni)) {
-                $recipientUser = User::staticGet('id', $recipient);
-                if (!empty($recipientUser)) {
-                    $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY;
-                }
+                $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY;
+            }
+        }
+
+        // Exclude any deleted, non-local, or blocking recipients.
+        $profile = $this->getProfile();
+        foreach ($ni as $id => $source) {
+            $user = User::staticGet('id', $id);
+            if (empty($user) || $user->hasBlocked($profile)) {
+                unset($ni[$id]);
             }
         }
 
index 8033229c4b74553ce0279f65fa896851f96b86d3..080e338fe7d0fa2d1b389869f37cabf0671f8ac3 100644 (file)
@@ -255,6 +255,19 @@ class User extends Memcached_DataObject
 
         $user->inboxed = 1;
 
+        // Set default-on options here, otherwise they'll be disabled
+        // initially for sites using caching, since the initial encache
+        // doesn't know about the defaults in the database.
+        $user->emailnotifysub = 1;
+        $user->emailnotifyfav = 1;
+        $user->emailnotifynudge = 1;
+        $user->emailnotifymsg = 1;
+        $user->emailnotifyattn = 1;
+        $user->emailmicroid = 1;
+        $user->emailpost = 1;
+        $user->jabbermicroid = 1;
+        $user->viewdesigns = 1;
+
         $user->created = common_sql_now();
 
         if (Event::handle('StartUserRegister', array(&$user, &$profile))) {
@@ -552,6 +565,9 @@ class User extends Memcached_DataObject
         if (Subscription::exists($other, $self)) {
             Subscription::cancel($other, $self);
         }
+        if (Subscription::exists($self, $other)) {
+            Subscription::cancel($self, $other);
+        }
 
         $block->query('COMMIT');
 
index 6bfd5c5f15d216e38856483e3fc2c8ecfba47b03..04d9d7ba658cb4e92798539e30135d25f96ea38d 100644 (file)
@@ -52,6 +52,10 @@ VALUES
     ('socialoomphBfD4pMqz31', 'SocialOomph', 'http://www.socialoomph.com/', now()),
     ('spaz','Spaz','http://funkatron.com/spaz', now()),
     ('StatusNet Desktop', 'StatusNet Desktop', 'http://status.net/desktop', now()),
+    ('StatusNet Mobile', 'StatusNet Mobile', 'http://status.net/mobile', now()),
+    ('StatusNet iPhone', 'iPhone', 'http://status.net/iphone', now()),
+    ('StatusNet Android', 'Android', 'http://status.net/android', now()),
+    ('StatusNet Blackberry', 'Blackberry', 'http://status.net/blackberry', now()),
     ('tarpipe','tarpipe','http://tarpipe.com/', now()),
     ('tjunar','Tjunar','http://nederflash.nl/boek/titels/tjunar-air', now()),
     ('tr.im','tr.im','http://tr.im/', now()),
index 5c4b4a7b7dcd9b3499c09d9820697f4b4e2d240a..5dcf78dcc964e9aa14ed4585cd2d2df44cf5a0eb 100644 (file)
@@ -1018,17 +1018,22 @@ class Action extends HTMLOutputter // lawsuit
             }
         }
 
+        $checked = false;
         if ($etag) {
             $if_none_match = (array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)) ?
               $_SERVER['HTTP_IF_NONE_MATCH'] : null;
-            if ($if_none_match && $this->_hasEtag($etag, $if_none_match)) {
-                header('HTTP/1.1 304 Not Modified');
-                // Better way to do this?
-                exit(0);
+            if ($if_none_match) {
+                // If this check fails, ignore the if-modified-since below.
+                $checked = true;
+                if ($this->_hasEtag($etag, $if_none_match)) {
+                    header('HTTP/1.1 304 Not Modified');
+                    // Better way to do this?
+                    exit(0);
+                }
             }
         }
 
-        if ($lm && array_key_exists('HTTP_IF_MODIFIED_SINCE', $_SERVER)) {
+        if (!$checked && $lm && array_key_exists('HTTP_IF_MODIFIED_SINCE', $_SERVER)) {
             $if_modified_since = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
             $ims = strtotime($if_modified_since);
             if ($lm <= $ims) {
index f126b84ae33150de76b1d1dec6cfc486eadf10e5..224b6eaa1b62de73ebe71ddd4a7feabbd9a50553 100644 (file)
@@ -256,8 +256,9 @@ class ApplicationEditForm extends Form
 
         // Default to Browser
 
-        if ($this->application->type == Oauth_application::$browser
-            || empty($this->application->type)) {
+        if (empty($this->application)
+            || empty($this->application->type)
+            || $this->application->type == Oauth_application::$browser) {
             $attrs['checked'] = 'checked';
         }
 
@@ -274,7 +275,7 @@ class ApplicationEditForm extends Form
                        'class' => 'radio',
                        'value' => Oauth_application::$desktop);
 
-        if ($this->application->type == Oauth_application::$desktop) {
+        if (!empty($this->application) && $this->application->type == Oauth_application::$desktop) {
             $attrs['checked'] = 'checked';
         }
 
@@ -298,8 +299,9 @@ class ApplicationEditForm extends Form
 
         // default to read-only access
 
-        if ($this->application->access_type & Oauth_application::$readAccess
-            || empty($this->application->access_type)) {
+        if (empty($this->application)
+            || empty($this->application->access_type)
+            || $this->application->access_type & Oauth_application::$readAccess) {
             $attrs['checked'] = 'checked';
         }
 
@@ -316,7 +318,8 @@ class ApplicationEditForm extends Form
                        'class' => 'radio',
                        'value' => 'rw');
 
-        if ($this->application->access_type & Oauth_application::$readAccess
+        if (!empty($this->application)
+            && $this->application->access_type & Oauth_application::$readAccess
             && $this->application->access_type & Oauth_application::$writeAccess
             ) {
             $attrs['checked'] = 'checked';
index 4887cac452ffb09997f889b00f7346d3394f1cf9..b1f95fcb69232f19b4cfdc20e30ec68931d4b6b1 100644 (file)
@@ -901,7 +901,7 @@ class HelpCommand extends Command
     function handle($channel)
     {
         $channel->output($this->user,
-                         // TRANS: Help text for commands.
+                         // TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
                          _("Commands:\n".
                            "on - turn on notifications\n".
                            "off - turn off notifications\n".
index 3dda9fd1ac8dd14865ef4ccfee486663e73b07e4..51553b899906b9ae64e58ea9ceaa5f70bc9185f6 100644 (file)
@@ -100,7 +100,7 @@ class DBQueueManager extends QueueManager
             }
         } else {
             $this->_log(LOG_INFO, "[$queue] Got empty/deleted item, discarding");
-            $this->_fail($qi);
+            $this->_done($qi);
         }
         return true;
     }
index 0b90cb01d7129e59ea1bada11ca85a78e96ebd93..dc853f657b1e53f76b00d162cb22a7dd49fc7ab2 100644 (file)
@@ -494,6 +494,29 @@ function common_is_real_login()
     return common_logged_in() && $_SESSION['real_login'];
 }
 
+/**
+ * Get a hash portion for HTTP caching Etags and such including
+ * info on the current user's session. If login/logout state changes,
+ * or we've changed accounts, or we've renamed the current user,
+ * we'll get a new hash value.
+ *
+ * This should not be considered secure information.
+ *
+ * @param User $user (optional; uses common_current_user() if left out)
+ * @return string
+ */
+function common_user_cache_hash($user=false)
+{
+    if ($user === false) {
+        $user = common_current_user();
+    }
+    if ($user) {
+        return crc32($user->id . ':' . $user->nickname);
+    } else {
+        return '0';
+    }
+}
+
 // get canonical version of nickname for comparison
 function common_canonical_nickname($nickname)
 {
@@ -1105,26 +1128,30 @@ function common_date_string($dt)
         // TRANS: Used in notices to indicate when the notice was made compared to now.
         return _('about a minute ago');
     } else if ($diff < 3300) {
+        $minutes = round($diff/60);
         // TRANS: Used in notices to indicate when the notice was made compared to now.
-        return sprintf( ngettext('about one minute ago', 'about %d minutes ago'), round($diff/60));
+        return sprintf( ngettext('about one minute ago', 'about %d minutes ago', $minutes), $minutes);
     } else if ($diff < 5400) {
         // TRANS: Used in notices to indicate when the notice was made compared to now.
         return _('about an hour ago');
     } else if ($diff < 22 * 3600) {
+        $hours = round($diff/3600);
         // TRANS: Used in notices to indicate when the notice was made compared to now.
-        return sprintf( ngettext('about one hour ago', 'about %d hours ago'), round($diff/3600));
+        return sprintf( ngettext('about one hour ago', 'about %d hours ago', $hours), $hours);
     } else if ($diff < 37 * 3600) {
         // TRANS: Used in notices to indicate when the notice was made compared to now.
         return _('about a day ago');
     } else if ($diff < 24 * 24 * 3600) {
+        $days = round($diff/(24*3600));
         // TRANS: Used in notices to indicate when the notice was made compared to now.
-        return sprintf( ngettext('about one day ago', 'about %d days ago'), round($diff/(24*3600)));
+        return sprintf( ngettext('about one day ago', 'about %d days ago', $days), $days);
     } else if ($diff < 46 * 24 * 3600) {
         // TRANS: Used in notices to indicate when the notice was made compared to now.
         return _('about a month ago');
     } else if ($diff < 330 * 24 * 3600) {
+        $months = round($diff/(30*24*3600));
         // TRANS: Used in notices to indicate when the notice was made compared to now.
-        return sprintf( ngettext('about one month ago', 'about %d months ago'), round($diff/(30*24*3600)));
+        return sprintf( ngettext('about one month ago', 'about %d months ago',$months), $months);
     } else if ($diff < 480 * 24 * 3600) {
         // TRANS: Used in notices to indicate when the notice was made compared to now.
         return _('about a year ago');
@@ -1453,7 +1480,12 @@ function common_log_db_error(&$object, $verb, $filename=null)
 {
     $objstr = common_log_objstring($object);
     $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
-    common_log(LOG_ERR, $last_error->message . '(' . $verb . ' on ' . $objstr . ')', $filename);
+    if (is_object($last_error)) {
+        $msg = $last_error->message;
+    } else {
+        $msg = 'Unknown error (' . var_export($last_error, true) . ')';
+    }
+    common_log(LOG_ERR, $msg . '(' . $verb . ' on ' . $objstr . ')', $filename);
 }
 
 function common_log_objstring(&$object)
index aee41ce2ba2f4887c5122ef020b47624ed48b9fd..982de63ddda9aa9dcf81da686b8fd8aec3156123 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Afrikaans (Afrikaans)
+# Translation of StatusNet - Core to Afrikaans (Afrikaans)
 # Expored from translatewiki.net
 #
 # Author: Naudefj
@@ -7,19 +7,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:37+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:13+0000\n"
 "Language-Team: Afrikaans <http://translatewiki.net/wiki/Portal:af>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: af\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1619,6 +1619,24 @@ msgstr "lede van die groep %s"
 msgid "Admin"
 msgstr "Administrateur"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4092,14 +4110,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -4435,7 +4459,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "U is 'n lid van hierdie groep:"
 msgstr[1] "U is 'n lid van hierdie groepe:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4587,6 +4611,62 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -5032,6 +5112,23 @@ msgstr "Antwoord"
 msgid "Nudge"
 msgstr "Aanpor"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr "Persoonlik"
@@ -5129,6 +5226,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr "Term(e)"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Gebruikers"
@@ -5290,22 +5392,54 @@ msgid "about a minute ago"
 msgstr "ongeveer 'n minuut gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "ongeveer 'n uur gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "ongeveer een dag gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "ongeveer een maand gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "ongeveer een jaar gelede"
 
index 056cfb15e47d4ef210f4b8a79e8375f1378bd28e..5ab941eab89b94fc9a978baff25cdefae926e1b5 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Arabic (العربية)
+# Translation of StatusNet - Core to Arabic (العربية)
 # Expored from translatewiki.net
 #
 # Author: Brion
@@ -9,21 +9,21 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:38+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:19+0000\n"
 "Language-Team: Arabic <http://translatewiki.net/wiki/Portal:ar>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ar\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == "
 "2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= "
 "99) ? 4 : 5 ) ) ) );\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1633,10 +1633,28 @@ msgstr "قائمة بمستخدمي هذه المجموعة."
 msgid "Admin"
 msgstr "إداري"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "اجعل المستخدم إداريًا في المجموعة"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4657,9 +4675,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5024,7 +5053,7 @@ msgstr[3] "أنت عضو في هذه المجموعات:"
 msgstr[4] ""
 msgstr[5] ""
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5220,6 +5249,78 @@ msgstr "صِف المجموعة أو الموضوع"
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "المجموعات الأكثر أعضاءً"
@@ -5729,6 +5830,23 @@ msgstr "نبّه هذا المستخدم"
 msgid "Nudge"
 msgstr "نبّه"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "تعذّر إدراج اشتراك جديد."
@@ -5867,6 +5985,11 @@ msgstr "ابحث في الموقع"
 msgid "Keyword(s)"
 msgstr "الكلمات المفتاحية"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6058,22 +6181,70 @@ msgid "about a minute ago"
 msgstr "قبل دقيقة تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "قبل ساعة تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "قبل يوم تقريبا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "قبل شهر تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "قبل سنة تقريبًا"
 
index e549610ab169de772a1962410d4f4bebdbabacd9..c4c8f4a3bcea15a9c1fd8bc097c21bf759410908 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Egyptian Spoken Arabic (مصرى)
+# Translation of StatusNet - Core to Egyptian Spoken Arabic (مصرى)
 # Expored from translatewiki.net
 #
 # Author: Dudi
@@ -9,21 +9,21 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:40+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:21+0000\n"
 "Language-Team: Egyptian Spoken Arabic <http://translatewiki.net/wiki/Portal:"
 "arz>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: arz\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1448,6 +1448,24 @@ msgstr "قائمه بمستخدمى هذه المجموعه."
 msgid "Admin"
 msgstr "إداري"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4150,9 +4168,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -4491,7 +4520,7 @@ msgstr[3] "أنت عضو فى هذه المجموعات:"
 msgstr[4] ""
 msgstr[5] ""
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4659,6 +4688,78 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "المجموعات الأكثر أعضاءً"
@@ -5113,6 +5214,23 @@ msgstr "نبّه هذا المستخدم"
 msgid "Nudge"
 msgstr "نبّه"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "تعذّر إدراج اشتراك جديد."
@@ -5242,6 +5360,11 @@ msgstr "ابحث فى الموقع"
 msgid "Keyword(s)"
 msgstr "الكلمات المفتاحية"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -5429,22 +5552,70 @@ msgid "about a minute ago"
 msgstr "قبل دقيقه تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "قبل ساعه تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "قبل يوم تقريبا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "قبل شهر تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "قبل سنه تقريبًا"
 
index 02f1172d0f9ad5d9c1f10d3c97d3408b25c5abd7..b3e0e2950d5e926bff09528bb42eb5d00dbdedca 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Bulgarian (Български)
+# Translation of StatusNet - Core to Bulgarian (Български)
 # Expored from translatewiki.net
 #
 # Author: DCLXVI
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:41+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:23+0000\n"
 "Language-Team: Bulgarian <http://translatewiki.net/wiki/Portal:bg>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: bg\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1649,6 +1649,24 @@ msgstr "Списък с потребителите в тази група."
 msgid "Admin"
 msgstr "Настройки"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4601,9 +4619,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -4916,7 +4945,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Не членувате в тази група."
 msgstr[1] "Не членувате в тази група."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5087,6 +5116,78 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Групи с най-много членове"
@@ -5582,6 +5683,23 @@ msgstr "Побутване"
 msgid "Send a nudge to this user"
 msgstr "Побутване на този потребител"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Грешка при добавяне на нов абонамент."
@@ -5708,6 +5826,11 @@ msgstr "Търсене в сайта"
 msgid "Keyword(s)"
 msgstr "Ключови думи"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -5896,22 +6019,54 @@ msgid "about a minute ago"
 msgstr "преди около минута"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "преди около час"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "преди около ден"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "преди около месец"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "преди около година"
 
index 4e5bdf2e0459d979e169ac8681f4769834c40f3c..cacb78fb440f6d4bb9db91b884cbe6756c44b1c9 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Breton (Brezhoneg)
+# Translation of StatusNet - Core to Breton (Brezhoneg)
 # Expored from translatewiki.net
 #
 # Author: Fulup
@@ -9,19 +9,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:42+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:25+0000\n"
 "Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: br\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1731,10 +1731,28 @@ msgstr "Roll an implijerien enrollet er strollad-mañ."
 msgid "Admin"
 msgstr "Merañ"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Lakaat an implijer da vezañ ur merour eus ar strollad"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4817,19 +4835,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5206,7 +5235,7 @@ msgstr "Den n'eo koumanantet deoc'h."
 msgid "You are not a member of any groups."
 msgstr "N'oc'h ezel eus strollad ebet."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5356,6 +5385,78 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
 msgstr ""
@@ -5793,6 +5894,23 @@ msgstr "Blinkadenn"
 msgid "Send a nudge to this user"
 msgstr "Kas ur blinkadenn d'an implijer-mañ"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr "Hiniennel"
@@ -5910,6 +6028,11 @@ msgstr "Klask el lec'hienn"
 msgid "Keyword(s)"
 msgstr "Ger(ioù) alc'hwez"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6071,22 +6194,54 @@ msgid "about a minute ago"
 msgstr "1 vunutenn zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "1 eurvezh zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "1 devezh zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "miz zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "bloaz zo well-wazh"
 
index 914e8a189d16054560eb07ccfcffcc0586a6e22b..cf1c347757af1566de26fe01ce292e6bf85dd54c 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Catalan (Català)
+# Translation of StatusNet - Core to Catalan (Català)
 # Expored from translatewiki.net
 #
 # Author: Aleator
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:43+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:26+0000\n"
 "Language-Team: Catalan <http://translatewiki.net/wiki/Portal:ca>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ca\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1896,10 +1896,28 @@ msgstr "La llista dels usuaris d'aquest grup."
 msgid "Admin"
 msgstr "Admin"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Fes l'usuari un administrador del grup"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5533,14 +5551,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5974,7 +6008,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Sou un membre d'aquest grup:"
 msgstr[1] "Sou un membre d'aquests grups:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6195,6 +6229,78 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr "Sobrenoms addicionals del grup, separats amb comes o espais, màx. %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grups amb més membres"
@@ -6689,6 +6795,23 @@ msgstr "No s'ha pogut moure el fitxer al directori de destinació."
 msgid "Could not determine file's MIME type."
 msgstr "No s'ha pogut determinar el tipus MIME del fitxer."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Envia un avís directe"
@@ -6804,6 +6927,23 @@ msgstr "Crida l'atenció"
 msgid "Send a nudge to this user"
 msgstr "Crida l'atenció a l'usuari"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "No s'ha pogut inserir una nova subscripció."
@@ -6947,6 +7087,11 @@ msgstr "Cerca al lloc"
 msgid "Keyword(s)"
 msgstr "Paraules clau"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7156,22 +7301,54 @@ msgid "about a minute ago"
 msgstr "fa un minut"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "fa una hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "fa un dia"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "fa un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "fa un any"
 
index f01a064290d66735acee300645a572659df848f6..2c8d855c4569fca2cf5a0b8768580bab758e9a23 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Czech (Česky)
+# Translation of StatusNet - Core to Czech (Česky)
 # Expored from translatewiki.net
 #
 # Author: Koo6
@@ -8,20 +8,20 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:45+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:28+0000\n"
 "Language-Team: Czech <http://translatewiki.net/wiki/Portal:cs>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: cs\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : "
 "2 );\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1879,10 +1879,28 @@ msgstr "Seznam uživatelů v této skupině."
 msgid "Admin"
 msgstr "Admin"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Uďelat uživatele adminem skupiny"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5463,14 +5481,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5903,7 +5937,7 @@ msgstr[0] "Jste členem této skupiny:"
 msgstr[1] "Jste členem těchto skupin:"
 msgstr[2] ""
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6125,6 +6159,78 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr "Další přezdívky pro skupinu, oddělené čárkou nebo mezerou, max %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Skupiny s nejvíce členy"
@@ -6617,6 +6723,23 @@ msgstr "Soubor nemohl být přesunut do cílového adresáře."
 msgid "Could not determine file's MIME type."
 msgstr "Nelze určit typ MIME souboru."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Pošlete přímou zprávu"
@@ -6732,6 +6855,23 @@ msgstr "Pošťouchnout"
 msgid "Send a nudge to this user"
 msgstr "Poslat pošťouchnutí tomuto uživateli"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Nelze vložit odebírání"
@@ -6875,6 +7015,11 @@ msgstr "Prohledat stránky"
 msgid "Keyword(s)"
 msgstr "Klíčová slova"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7084,22 +7229,58 @@ msgid "about a minute ago"
 msgstr "asi před minutou"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "asi před hodinou"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "asi přede dnem"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "asi před měsícem"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "asi před rokem"
 
index 915d860a5152ea97dc7241c4eb6714e416fc7117..488347944e282fae0694b7a497515460cd10adea 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Danish (Dansk)
+# Translation of StatusNet - Core to Danish (Dansk)
 # Expored from translatewiki.net
 #
 # Author: Brion
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:46+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:30+0000\n"
 "Language-Team: Danish <http://translatewiki.net/wiki/Portal:da>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: da\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1884,10 +1884,28 @@ msgstr "En liste over brugerne i denne gruppe."
 msgid "Admin"
 msgstr "Administrator"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Gør bruger til administrator af gruppen"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4247,14 +4265,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -4547,7 +4571,7 @@ msgstr ""
 msgid "No one is subscribed to you."
 msgstr ""
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4690,12 +4714,62 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
 #. TRANS: Menu item in the group navigation page.
 #: lib/groupnav.php:95
 msgctxt "MENU"
 msgid "Members"
 msgstr ""
 
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -5118,6 +5192,23 @@ msgstr ""
 msgid "Nudge"
 msgstr ""
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr ""
@@ -5204,6 +5295,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -5351,7 +5447,7 @@ msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1109
+#: lib/util.php:1110
 #, php-format
 msgid "about one minute ago"
 msgid_plural "about %d minutes ago"
@@ -5359,12 +5455,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1115
+#: lib/util.php:1117
 #, php-format
 msgid "about one hour ago"
 msgid_plural "about %d hours ago"
@@ -5372,12 +5468,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about one day ago"
 msgid_plural "about %d days ago"
@@ -5385,12 +5481,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1127
+#: lib/util.php:1131
 #, php-format
 msgid "about one month ago"
 msgid_plural "about %d months ago"
@@ -5398,7 +5494,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
index ab5c443404f18e9ac28dc4ffabae254b7c5c342b..5664d6cd515742894cc37934ad7d4173a89c30fb 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to German (Deutsch)
+# Translation of StatusNet - Core to German (Deutsch)
 # Expored from translatewiki.net
 #
 # Author: Apmon
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:47+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:32+0000\n"
 "Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: de\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -414,8 +414,8 @@ msgstr "Konnte keine Statusmeldungen finden."
 #: actions/register.php:212
 msgid "Nickname must have only lowercase letters and numbers and no spaces."
 msgstr ""
-"Der Nutzername darf nur aus Kleinbuchstaben und Ziffern bestehen. "
-"Leerzeichen sind nicht erlaubt."
+"Der Nutzername darf nur aus Kleinbuchstaben und Zahlen bestehen. Leerzeichen "
+"sind nicht erlaubt."
 
 #: actions/apigroupcreate.php:177 actions/editgroup.php:190
 #: actions/newgroup.php:130 actions/profilesettings.php:238
@@ -1910,10 +1910,28 @@ msgstr "Liste der Benutzer in dieser Gruppe."
 msgid "Admin"
 msgstr "Admin"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Blockieren"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Benutzer zu einem Admin dieser Gruppe ernennen"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -2981,7 +2999,7 @@ msgstr "Profilinformation"
 
 #: actions/profilesettings.php:108 lib/groupeditform.php:154
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
-msgstr "1-64 Kleinbuchstaben oder Ziffern, keine Sonder- oder Leerzeichen"
+msgstr "1-64 Kleinbuchstaben oder Zahlen, keine Satz- oder Leerzeichen"
 
 #: actions/profilesettings.php:111 actions/register.php:455
 #: actions/showgroup.php:256 actions/tagother.php:104
@@ -3354,7 +3372,7 @@ msgstr "Registrieren"
 
 #: actions/register.php:142
 msgid "Registration not allowed."
-msgstr "Registrierung nicht gestattet"
+msgstr "Registrierung nicht erlaubt"
 
 #: actions/register.php:205
 msgid "You can't register if you don't agree to the license."
@@ -3380,8 +3398,7 @@ msgstr ""
 #: actions/register.php:432
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
 msgstr ""
-"1-64 kleingeschriebene Buchstaben oder Zahlen, keine Satz- oder Leerzeichen. "
-"Pflicht."
+"1-64 Kleinbuchstaben oder Zahlen, keine Satz- oder Leerzeichen. Pflicht."
 
 #: actions/register.php:437
 msgid "6 or more characters. Required."
@@ -5239,7 +5256,7 @@ msgstr "Abmelden"
 #: lib/action.php:495
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Neues Konto erstellen"
+msgstr "Neues Benutzerkonto erstellen"
 
 #. TRANS: Main menu option when not logged in to register a new account
 #: lib/action.php:498
@@ -5545,14 +5562,30 @@ msgstr "API-Ressource erfordert lesen/schreib Zugriff; du hast nur Leserechte."
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5986,7 +6019,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Du bist Mitglied dieser Gruppe:"
 msgstr[1] "Du bist Mitglied dieser Gruppen:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6208,6 +6241,78 @@ msgstr ""
 "Zusätzliche Spitznamen für die Gruppe, Komma oder Leerzeichen getrennt, max %"
 "d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "%s-Logo hinzufügen oder bearbeiten"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "%s-Design hinzufügen oder bearbeiten"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Gruppen mit den meisten Mitgliedern"
@@ -6701,6 +6806,25 @@ msgstr "Datei konnte nicht in das Zielverzeichnis verschoben werden."
 msgid "Could not determine file's MIME type."
 msgstr "Konnte den MIME-Typ nicht feststellen."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+"„%1$s“ ist kein unterstütztes Dateiformat auf diesem Server. Versuche es mit "
+"einem anderen %2$s-Format."
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Versende eine direkte Nachricht"
@@ -6816,6 +6940,23 @@ msgstr "Stups"
 msgid "Send a nudge to this user"
 msgstr "Sende diesem Benutzer einen Stups"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Konnte neues Abonnement nicht eintragen."
@@ -6959,6 +7100,11 @@ msgstr "Site durchsuchen"
 msgid "Keyword(s)"
 msgstr "Suchbegriff"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7167,22 +7313,54 @@ msgid "about a minute ago"
 msgstr "vor einer Minute"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] "vor ca. einer Minute"
+msgstr[1] "vor ca. %d Minuten"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "vor einer Stunde"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] "vor ca. einer Stunde"
+msgstr[1] "vor ca. %d Stunden"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "vor einem Tag"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] "vor ca. einem Tag"
+msgstr[1] "vor ca. %d Tagen"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "vor einem Monat"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] "vor ca. einem Monat"
+msgstr[1] "vor ca. %d Monaten"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "vor einem Jahr"
 
index fbc7354d0e6a4b42bcd77febb883b5265351c703..5543c1f24cebd453685208725a42f27c8bdfa549 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Greek (Ελληνικά)
+# Translation of StatusNet - Core to Greek (Ελληνικά)
 # Expored from translatewiki.net
 #
 # Author: Crazymadlover
@@ -9,19 +9,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:48+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:34+0000\n"
 "Language-Team: Greek <http://translatewiki.net/wiki/Portal:el>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: el\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1372,10 +1372,22 @@ msgstr ""
 msgid "Admin"
 msgstr "Διαχειριστής"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr ""
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
 #. TRANS: Submit button title.
 #: actions/groupmembers.php:537
 msgctxt "TOOLTIP"
@@ -3930,14 +3942,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -4294,7 +4312,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Ομάδες με τα περισσότερα μέλη"
 msgstr[1] "Ομάδες με τα περισσότερα μέλη"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4462,6 +4480,78 @@ msgstr "Τοποθεσία της ομάδας (εάν υπάρχει), πχ: \"
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Ομάδες με τα περισσότερα μέλη"
@@ -4919,6 +5009,23 @@ msgstr ""
 msgid "Nudge"
 msgstr ""
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Απέτυχε η εισαγωγή νέας συνδρομής."
@@ -5046,6 +5153,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -5201,7 +5313,7 @@ msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1109
+#: lib/util.php:1110
 #, php-format
 msgid "about one minute ago"
 msgid_plural "about %d minutes ago"
@@ -5209,12 +5321,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1115
+#: lib/util.php:1117
 #, php-format
 msgid "about one hour ago"
 msgid_plural "about %d hours ago"
@@ -5222,12 +5334,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about one day ago"
 msgid_plural "about %d days ago"
@@ -5235,12 +5347,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1127
+#: lib/util.php:1131
 #, php-format
 msgid "about one month ago"
 msgid_plural "about %d months ago"
@@ -5248,7 +5360,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
index 0d66123b4f1d6ffcffcaf09b5332bcd96f874bf2..b0b3d9454172245895dbccc801452563c92b861f 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to British English (British English)
+# Translation of StatusNet - Core to British English (British English)
 # Expored from translatewiki.net
 #
 # Author: Brion
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:50+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:38+0000\n"
 "Language-Team: British English <http://translatewiki.net/wiki/Portal:en-gb>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: en-gb\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1865,10 +1865,28 @@ msgstr "A list of the users in this group."
 msgid "Admin"
 msgstr "Admin"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Make user an admin of the group"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5260,14 +5278,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -5610,7 +5634,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "You are not a member of that group."
 msgstr[1] "You are not a member of that group."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5826,6 +5850,78 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Groups with most members"
@@ -6354,6 +6450,23 @@ msgstr "Nudge"
 msgid "Send a nudge to this user"
 msgstr "Send a nudge to this user"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Couldn't insert new subscription."
@@ -6497,6 +6610,11 @@ msgstr "Search site"
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6685,22 +6803,54 @@ msgid "about a minute ago"
 msgstr "about a minute ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "about an hour ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "about a day ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "about a month ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "about a year ago"
 
index c5b268ea094932be41c0fc1f0f5c791bde5d1804..49aef778db7511d103d0e487b1ca58eb2b7855f6 100644 (file)
@@ -1,8 +1,9 @@
-# Translation of StatusNet to Esperanto (Esperanto)
+# Translation of StatusNet - Core to Esperanto (Esperanto)
 # Expored from translatewiki.net
 #
 # Author: AVRS
 # Author: Brion
+# Author: Eliovir
 # Author: Ianmcorvidae
 # Author: Kris10
 # Author: LyzTyphone
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:49+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:36+0000\n"
 "Language-Team: Esperanto <http://translatewiki.net/wiki/Portal:eo>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: eo\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1874,10 +1875,28 @@ msgstr "Listo de uzantoj en tiu ĉi grupo"
 msgid "Admin"
 msgstr "Administranto"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Bloki"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Elekti uzanton grupestro."
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Estrigi"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Estrigi la uzanton"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -3257,6 +3276,10 @@ msgstr "Pasvorto devas enhavi 6 signojn aŭ pli."
 msgid "Password and confirmation do not match."
 msgstr "Pasvorto kaj komfirmo ne kongruas."
 
+#: actions/recoverpassword.php:388 actions/register.php:255
+msgid "Error setting user."
+msgstr "Eraris agordi uzanton."
+
 #: actions/recoverpassword.php:395
 msgid "New password successfully saved. You are now logged in."
 msgstr "Nova pasvorto sukcese konserviĝas. Vi nun estas ensalutinta."
@@ -3635,7 +3658,7 @@ msgstr "Aplikaĵa ago"
 
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
-msgstr ""
+msgstr "Rekomencigi ŝlosilon & sekreton"
 
 #: actions/showapplication.php:261
 msgid "Application info"
@@ -3643,19 +3666,19 @@ msgstr "Aplikaĵa informo"
 
 #: actions/showapplication.php:263
 msgid "Consumer key"
-msgstr ""
+msgstr "Konsumanta ŝlosilo"
 
 #: actions/showapplication.php:268
 msgid "Consumer secret"
-msgstr ""
+msgstr "Konsumanta sekreto"
 
 #: actions/showapplication.php:273
 msgid "Request token URL"
-msgstr ""
+msgstr "Pet-ĵetona URL"
 
 #: actions/showapplication.php:278
 msgid "Access token URL"
-msgstr ""
+msgstr "Alir-ĵetona URL"
 
 #: actions/showapplication.php:283
 msgid "Authorize URL"
@@ -3669,6 +3692,10 @@ msgstr ""
 "Rimarku: Ni subtenas HMAC-SHA1-subskribo. Ni ne subtenas platteksta "
 "subskribado-metodon."
 
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Ĉu vi certe volas rekomencigi vian konsumantan ŝlosilon kaj sekreton?"
+
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3962,7 +3989,7 @@ msgstr "Teksto estu almenaŭ 0 literojn (senlime)."
 
 #: actions/siteadminpanel.php:171
 msgid "Dupe limit must be one or more seconds."
-msgstr ""
+msgstr "Refoja limo estu almenaŭ unu sekundo."
 
 #: actions/siteadminpanel.php:221
 msgid "General"
@@ -3982,11 +4009,11 @@ msgstr "Eblige de"
 
 #: actions/siteadminpanel.php:230
 msgid "Text used for credits link in footer of each page"
-msgstr ""
+msgstr "Teksto por dankado-ligilo je subo por ĉiu paĝo"
 
 #: actions/siteadminpanel.php:234
 msgid "Brought by URL"
-msgstr ""
+msgstr "Alportita de URL"
 
 #: actions/siteadminpanel.php:235
 msgid "URL used for credits link in footer of each page"
@@ -4012,59 +4039,100 @@ msgstr "Defaŭlta horzono de la retejo; kutime UTC."
 msgid "Default language"
 msgstr "Defaŭlta lingvo"
 
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr "Reteja lingvo por kiam lingva prefero ne troviĝas el la foliumilo"
+
 #: actions/siteadminpanel.php:271
 msgid "Limits"
 msgstr "Limoj"
 
 #: actions/siteadminpanel.php:274
 msgid "Text limit"
-msgstr ""
+msgstr "Teksta longlimo"
 
 #: actions/siteadminpanel.php:274
 msgid "Maximum number of characters for notices."
-msgstr ""
+msgstr "Longlimo por afiŝoj."
 
 #: actions/siteadminpanel.php:278
 msgid "Dupe limit"
-msgstr ""
+msgstr "Refoja limo"
 
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
+"Kiel longe devas uzantoj atendas (je sekundo) antaŭ afiŝi la saman refejo."
 
 #: actions/sitenoticeadminpanel.php:56
 msgid "Site Notice"
-msgstr ""
+msgstr "Reteja Anonco"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Redakti retejan mesaĝon"
 
 #: actions/sitenoticeadminpanel.php:103
 msgid "Unable to save site notice."
-msgstr ""
+msgstr "Malsukcesis konservi retejan anoncon."
 
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
-msgstr ""
+msgstr "Longlimo por reteja anonco estas 255 literoj."
 
 #: actions/sitenoticeadminpanel.php:176
 msgid "Site notice text"
-msgstr ""
+msgstr "Teksto de reteja anonco."
 
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
-msgstr ""
+msgstr "Teksto de reteja anonco (apenaŭ 255 literoj; HTML eblas)"
 
 #: actions/sitenoticeadminpanel.php:198
 msgid "Save site notice"
 msgstr "Konservi retejan agordon"
 
+#. TRANS: Title for SMS settings.
+#: actions/smssettings.php:59
+msgid "SMS settings"
+msgstr "SMM-a agordo"
+
+#. TRANS: SMS settings page instructions.
+#. TRANS: %%site.name%% is the name of the site.
+#: actions/smssettings.php:74
+#, php-format
+msgid "You can receive SMS messages through email from %%site.name%%."
+msgstr "Vi povos ricevi SMM-mesaĝon per retpoŝto de %%site.name%%."
+
+#. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
+#: actions/smssettings.php:97
+msgid "SMS is not available."
+msgstr "SMM ne estas disponebla."
+
+#. TRANS: Form legend for SMS settings form.
+#: actions/smssettings.php:111
+msgid "SMS address"
+msgstr "SMM-a adreso"
+
+#. TRANS: Form guide in SMS settings form.
+#: actions/smssettings.php:120
+msgid "Current confirmed SMS-enabled phone number."
+msgstr "Nuna konfirmita SMM-pova telefonnumero"
+
 #. TRANS: Form guide in IM settings form.
 #: actions/smssettings.php:133
 msgid "Awaiting confirmation on this phone number."
-msgstr ""
+msgstr "Atendante konfirmon por la telefonnumero."
+
+#. TRANS: Field label for SMS address input in SMS settings form.
+#: actions/smssettings.php:142
+msgid "Confirmation code"
+msgstr "Konfirma kodo."
 
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
-msgstr ""
+msgstr "Entajpu la kodon, kiu vi ricevis per poŝtelefono."
 
 #. TRANS: Button label to confirm SMS confirmation code in SMS settings.
 #: actions/smssettings.php:148
@@ -4075,12 +4143,17 @@ msgstr "Konfirmi"
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
-msgstr ""
+msgstr "SMM-a telefonnumero"
 
 #. TRANS: SMS phone number input field instructions in SMS settings form.
 #: actions/smssettings.php:156
 msgid "Phone number, no punctuation or spaces, with area code"
-msgstr ""
+msgstr "Telefonnumero, sen interpunkcio aŭ spacoj, kun loka kodo"
+
+#. TRANS: Form legend for SMS preferences form.
+#: actions/smssettings.php:195
+msgid "SMS preferences"
+msgstr "SMM-aj preferoj"
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4088,21 +4161,73 @@ msgid ""
 "Send me notices through SMS; I understand I may incur exorbitant charges "
 "from my carrier."
 msgstr ""
+"Sendu al mi avizoj per SMM; mi komprenas ke la kosto eble estos multa de mia "
+"peranto."
+
+#. TRANS: Confirmation message for successful SMS preferences save.
+#: actions/smssettings.php:315
+msgid "SMS preferences saved."
+msgstr "SMM-prefero konserviĝas."
 
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
 msgstr "Mankas la telefononumero."
 
+#. TRANS: Message given saving SMS phone number without having selected a carrier.
+#: actions/smssettings.php:344
+msgid "No carrier selected."
+msgstr "Neniu peranto elektiĝas."
+
+#. TRANS: Message given saving SMS phone number that is already set.
+#: actions/smssettings.php:352
+msgid "That is already your phone number."
+msgstr "Tio estas jam via telefonnumero."
+
+#. TRANS: Message given saving SMS phone number that is already set for another user.
+#: actions/smssettings.php:356
+msgid "That phone number already belongs to another user."
+msgstr "Tiu telefonnumero jam apartenas al alia uzanto."
+
+#. TRANS: Message given saving valid SMS phone number that is to be confirmed.
+#: actions/smssettings.php:384
+msgid ""
+"A confirmation code was sent to the phone number you added. Check your phone "
+"for the code and instructions on how to use it."
+msgstr ""
+"Konfirmkodo jam sendiĝas al la aldonita telefonnumero. Kontrolu vian "
+"poŝtelefonon pri la kodo kaj gvido pri kiel uzi ĝin."
+
+#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
+#: actions/smssettings.php:413
+msgid "That is the wrong confirmation number."
+msgstr "Tiu konfirma kodo estas malĝusta."
+
+#. TRANS: Message given after successfully canceling SMS phone number confirmation.
+#: actions/smssettings.php:427
+msgid "SMS confirmation cancelled."
+msgstr "SMM-a konfirmo nuliĝas."
+
+#. TRANS: Message given trying to remove an SMS phone number that is not
+#. TRANS: registered for the active user.
+#: actions/smssettings.php:448
+msgid "That is not your phone number."
+msgstr "Tio ne estas via telefonnumero."
+
+#. TRANS: Message given after successfully removing a registered SMS phone number.
+#: actions/smssettings.php:470
+msgid "The SMS phone number was removed."
+msgstr "La SMM-numreo estas forigita."
+
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
-msgstr ""
+msgstr "Poŝtelefona peranto"
 
 #. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:516
 msgid "Select a carrier"
-msgstr ""
+msgstr "Elektu peranton"
 
 #. TRANS: Form instructions for mobile carrier dropdown menu in SMS settings.
 #. TRANS: %s is an administrative contact's e-mail address.
@@ -4112,32 +4237,51 @@ msgid ""
 "Mobile carrier for your phone. If you know a carrier that accepts SMS over "
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
+"Poŝtelefona peranto de via telefono. Se vi konas peranton, kiu akceptas SMM "
+"per retpoŝto sed ne listiĝas tie ĉi, sendu mesaĝon al ni sciigi, je %s."
+
+#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
+#: actions/smssettings.php:548
+msgid "No code entered"
+msgstr "Neniu kodo entajpita"
 
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:395
 msgid "Snapshots"
-msgstr ""
+msgstr "Momentfotoj"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Administri agordon pri momentfoto"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Momentfota ofteco nevalida."
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
-msgstr ""
+msgstr "Momentfota ofteco estu nombro."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Momentfota alraporta URL nevalida."
 
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
-msgstr ""
+msgstr "Harzarde dum ret-alklako."
 
 #: actions/snapshotadminpanel.php:201
 msgid "In a scheduled job"
-msgstr ""
+msgstr "Laŭplane"
 
 #: actions/snapshotadminpanel.php:206
 msgid "Data snapshots"
-msgstr ""
+msgstr "Datumaj momentfotoj"
 
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
-msgstr ""
+msgstr "Kiam sendu statistikan datumon al status.net serviloj"
 
 #: actions/snapshotadminpanel.php:217
 msgid "Frequency"
@@ -4145,70 +4289,102 @@ msgstr "Ofteco"
 
 #: actions/snapshotadminpanel.php:218
 msgid "Snapshots will be sent once every N web hits"
-msgstr ""
+msgstr "Momentfotoj sendiĝos post po N alklakoj"
 
 #: actions/snapshotadminpanel.php:226
 msgid "Report URL"
-msgstr ""
+msgstr "Alraporta URL"
 
 #: actions/snapshotadminpanel.php:227
 msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgstr "Momentfotoj sendiĝos al ĉi tiu URL"
 
 #: actions/snapshotadminpanel.php:248
 msgid "Save snapshot settings"
 msgstr "Konservi retejan agordon"
 
+#: actions/subedit.php:70
+msgid "You are not subscribed to that profile."
+msgstr "Vi ne abonis tiun profilon."
+
+#. TRANS: Exception thrown when a subscription could not be stored on the server.
+#: actions/subedit.php:83 classes/Subscription.php:136
+msgid "Could not save subscription."
+msgstr "Malsukcesis konservi abonon."
+
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
-msgstr ""
+msgstr "La ago akceptas nur POST-an peton."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Ne ekzistas tia profilo."
 
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr ""
+msgstr "Vi ne povas aboni foran  OMB 0.1-an profilon per ĉi tiu ago."
 
 #: actions/subscribe.php:145
 msgid "Subscribed"
 msgstr "Abonita"
 
+#: actions/subscribers.php:50
+#, php-format
+msgid "%s subscribers"
+msgstr "%s abonantoj"
+
+#: actions/subscribers.php:52
+#, php-format
+msgid "%1$s subscribers, page %2$d"
+msgstr "%1$s abonantoj, paĝo %2$d"
+
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
-msgstr ""
+msgstr "Jen homoj, kiuj rigardas viajn avizojn."
 
 #: actions/subscribers.php:67
 #, php-format
 msgid "These are the people who listen to %s's notices."
-msgstr ""
+msgstr "Jen homoj, kiuj rigardas avizojn de %s."
 
 #: actions/subscribers.php:108
 msgid ""
 "You have no subscribers. Try subscribing to people you know and they might "
 "return the favor"
-msgstr ""
+msgstr "Vi ne havas abonanton. Provu aboni konatojn, kaj ili eble reaboni vin"
 
 #: actions/subscribers.php:110
 #, php-format
 msgid "%s has no subscribers. Want to be the first?"
+msgstr "%s ne havas abonantojn. Ĉu vi volas esti la unua?"
+
+#: actions/subscribers.php:114
+#, php-format
+msgid ""
+"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
+"%) and be the first?"
 msgstr ""
+"%s ne havas abonantojn. Kial ne [krei konton](%%%%*action.*Register%%%%) kaj "
+"esti la unua?"
 
 #: actions/subscriptions.php:52
 #, php-format
 msgid "%s subscriptions"
-msgstr ""
+msgstr "%s abonatoj"
 
 #: actions/subscriptions.php:54
 #, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr ""
+msgstr "%1$s abonatoj, paĝo %2$d"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
-msgstr ""
+msgstr "Jen homoj, kies avizoj rigardas vi."
 
 #: actions/subscriptions.php:69
 #, php-format
 msgid "These are the people whose notices %s listens to."
-msgstr ""
+msgstr "Jen homoj, kies avizoj %s rigardas."
 
 #: actions/subscriptions.php:126
 #, php-format
@@ -4219,11 +4395,15 @@ msgid ""
 "featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
 "automatically subscribe to people you already follow there."
 msgstr ""
+"Vi ne nun abonas ies ajn avizoj. Provu aboni konatojn. Provu [homserĉi](%%"
+"action.peoplesearch%%), kontrolu grupanojn en interesaj grupoj, kaj nian "
+"[elstarajn uzantojn](%%action.featured%%). Se vi estas [Tvitanto](%%action."
+"twittersettings%%), vi povas aŭtomate aboni homon, kiun vi jam sekvas tie."
 
 #: actions/subscriptions.php:128 actions/subscriptions.php:132
 #, php-format
 msgid "%s is not listening to anyone."
-msgstr ""
+msgstr "%s ne abonas iun ajn."
 
 #: actions/subscriptions.php:208
 msgid "Jabber"
@@ -4233,34 +4413,87 @@ msgstr "Jabber"
 msgid "SMS"
 msgstr "SMS"
 
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Avizoj etikeditaj per %1$s - paĝo %2$d"
+
 #: actions/tag.php:87
 #, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr ""
+msgstr "Avizofluo pri etikedo %s (RSS 1.0)"
 
 #: actions/tag.php:93
 #, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr ""
+msgstr "Avizofluo pri etikedo %s (RSS 2.0)"
 
 #: actions/tag.php:99
 #, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr ""
+msgstr "Avizofluo pri etikedo %s (Atom)"
+
+#: actions/tagother.php:65
+#, php-format
+msgid "Tag %s"
+msgstr "Etikedo %s"
+
+#: actions/tagother.php:77 lib/userprofile.php:76
+msgid "User profile"
+msgstr "Uzanta profilo"
 
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
 msgstr "Foto"
 
+#: actions/tagother.php:141
+msgid "Tag user"
+msgstr "Etikedi uzanton"
+
+#: actions/tagother.php:151
+msgid ""
+"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
+"separated"
+msgstr ""
+"Etikedoj por ĉi tiuj uzanto (literoj, ciferoj, -, . Kaj _), apartigu per "
+"komo aŭ spaco."
+
 #: actions/tagother.php:193
 msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
-msgstr ""
+msgstr "Vi rajtas entikedi nur abonanton aŭ abonaton."
+
+#: actions/tagother.php:200
+msgid "Could not save tags."
+msgstr "Malsukcesis konservi etikedojn."
+
+#: actions/tagother.php:236
+msgid "Use this form to add tags to your subscribers or subscriptions."
+msgstr "Uzu ĉi tiun formularon por etikedi viajn abonantojn aŭ abonatojn."
+
+#: actions/tagrss.php:35
+msgid "No such tag."
+msgstr "Ne estas tiu etikedo."
+
+#: actions/unblock.php:59
+msgid "You haven't blocked that user."
+msgstr "Vi ne jam blokis la uzanton."
 
 #: actions/unsilence.php:72
 msgid "User is not silenced."
+msgstr "Uzanto ne estas silentigita."
+
+#: actions/unsubscribe.php:98
+msgid "Unsubscribed"
+msgstr "Malabonita"
+
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
+#, php-format
+msgid ""
+"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
+"Rigardato-flua permesilo \"%1$s\" ne konformas al reteja permesilo \"%2$s\"."
 
 #. TRANS: User admin panel title
 #: actions/useradminpanel.php:59
@@ -4268,9 +4501,13 @@ msgctxt "TITLE"
 msgid "User"
 msgstr "Uzanto"
 
+#: actions/useradminpanel.php:70
+msgid "User settings for this StatusNet site."
+msgstr "Uzantaj agordoj por ĉi tiu StatusNet-retejo."
+
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Nevalida biografia longlimo. Estu cifero."
 
 #: actions/useradminpanel.php:155
 msgid "Invalid welcome text. Max length is 255 characters."
@@ -4570,20 +4807,57 @@ msgstr "Dosiero tiel granda superos vian uzantan kvoton kun %d bajtoj."
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr "Dosiero tiel granda superos vian monatan kvoton kun %d bajtoj."
 
+#. TRANS: Client exception thrown if a file upload does not have a valid name.
+#: classes/File.php:248 classes/File.php:263
+msgid "Invalid filename."
+msgstr "Nevalida dosiernomo."
+
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
-msgstr ""
+msgstr "Malsukcesis aniĝi al grupon."
+
+#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
+#: classes/Group_member.php:55
+msgid "Not part of group."
+msgstr "Ne grupano."
+
+#. TRANS: Exception thrown when trying to leave a group fails.
+#: classes/Group_member.php:63
+msgid "Group leave failed."
+msgstr "Malsukcesis foriri de grupo."
+
+#. TRANS: Server exception thrown when updating a local group fails.
+#: classes/Local_group.php:42
+msgid "Could not update local group."
+msgstr "Malsukcesis ĝisdatigi lokan grupon."
+
+#. TRANS: Exception thrown when trying creating a login token failed.
+#. TRANS: %s is the user nickname for which token creation failed.
+#: classes/Login_token.php:78
+#, php-format
+msgid "Could not create login token for %s"
+msgstr "Malsukcesis krei ensalut-ĵetonon por %s"
 
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
-msgstr ""
+msgstr "Ne troviĝas datumbaza nomo aŭ DSN ie ajn."
 
 #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
 #: classes/Message.php:46
 msgid "You are banned from sending direct messages."
-msgstr ""
+msgstr "Vi blokiĝis de sendi rektan mesaĝon."
+
+#. TRANS: Message given when a message could not be stored on the server.
+#: classes/Message.php:63
+msgid "Could not insert message."
+msgstr "Malsukcesis enmeti mesaĝon."
+
+#. TRANS: Message given when a message could not be updated on the server.
+#: classes/Message.php:74
+msgid "Could not update message with new URI."
+msgstr "Malsukcesis ĝisdatigi mesaĝon per nova URI"
 
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
@@ -4684,6 +4958,11 @@ msgstr ""
 msgid "Design your profile"
 msgstr ""
 
+#. TRANS: Link title attribute in user account settings menu.
+#: lib/accountsettingsaction.php:144
+msgid "Other options"
+msgstr "Aliaj"
+
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
 msgid "Other"
@@ -4698,13 +4977,13 @@ msgstr "%1$s - %2$s"
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:164
 msgid "Untitled page"
-msgstr ""
+msgstr "Sentitola paĝo"
 
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:455
 msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
-msgstr ""
+msgstr "Tempstrio pri vi kaj amikoj"
 
 #. TRANS: Main menu option when logged in for access to personal profile and friends timeline
 #: lib/action.php:458
@@ -4712,6 +4991,12 @@ msgctxt "MENU"
 msgid "Personal"
 msgstr "Persona"
 
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:460
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "Ŝanĝu la retpoŝtadreson, vizaĝbildon, pasvorton aŭ la profilon"
+
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:465
 msgctxt "TOOLTIP"
@@ -4741,7 +5026,7 @@ msgstr "Administri"
 #, php-format
 msgctxt "TOOLTIP"
 msgid "Invite friends and colleagues to join you on %s"
-msgstr "Inviti amikojn kaj kolegojn aliĝi vin sur %s"
+msgstr "Inviti amikojn kaj kolegojn al %s kun vi"
 
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:481
@@ -4749,6 +5034,12 @@ msgctxt "MENU"
 msgid "Invite"
 msgstr "Inviti"
 
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:487
+msgctxt "TOOLTIP"
+msgid "Logout from the site"
+msgstr "Elsaluti el la retejo"
+
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:490
 msgctxt "MENU"
@@ -4767,6 +5058,17 @@ msgctxt "MENU"
 msgid "Register"
 msgstr "Registriĝi"
 
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:501
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr "Ensaluti al la retejo"
+
+#: lib/action.php:504
+msgctxt "MENU"
+msgid "Login"
+msgstr "Ensaluti"
+
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:507
 msgctxt "TOOLTIP"
@@ -4782,7 +5084,12 @@ msgstr "Helpo"
 #: lib/action.php:513
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
-msgstr ""
+msgstr "Serĉi homon aŭ tekston"
+
+#: lib/action.php:516
+msgctxt "MENU"
+msgid "Search"
+msgstr "Serĉi"
 
 #. TRANS: DT element for site notice. String is hidden in default CSS.
 #. TRANS: Menu item for site administration
@@ -4793,7 +5100,7 @@ msgstr ""
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:605
 msgid "Local views"
-msgstr ""
+msgstr "Loka vido"
 
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:778
@@ -4818,7 +5125,7 @@ msgstr "Oftaj demandoj"
 #. TRANS: Secondary navigation menu option leading to Terms of Service.
 #: lib/action.php:795
 msgid "TOS"
-msgstr ""
+msgstr "Serva Kondiĉo"
 
 #. TRANS: Secondary navigation menu option leading to privacy policy.
 #: lib/action.php:799
@@ -4899,6 +5206,11 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
+#. TRANS: DT element for pagination (previous/next, etc.).
+#: lib/action.php:1243
+msgid "Pagination"
+msgstr "Paĝado"
+
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1254
@@ -4982,14 +5294,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -5032,6 +5350,11 @@ msgstr ""
 msgid "Default access for this application: read-only, or read-write"
 msgstr ""
 
+#. TRANS: Submit button title.
+#: lib/applicationeditform.php:349
+msgid "Cancel"
+msgstr "Nuligi"
+
 #. TRANS: Application access type
 #: lib/applicationlist.php:135
 msgid "read-write"
@@ -5042,43 +5365,73 @@ msgstr ""
 msgid "read-only"
 msgstr ""
 
-#. TRANS: Used in application list. %1$s is a modified date, %2$s is access type (read-write or read-only)
-#: lib/applicationlist.php:143
-#, php-format
-msgid "Approved %1$s - \"%2$s\" access."
-msgstr ""
+#. TRANS: DT element label in attachment list.
+#: lib/attachmentlist.php:88
+msgid "Attachments"
+msgstr "Aldonaĵo"
+
+#. TRANS: DT element label in attachment list item.
+#: lib/attachmentlist.php:265
+msgid "Author"
+msgstr "Aŭtoro"
+
+#. TRANS: DT element label in attachment list item.
+#: lib/attachmentlist.php:279
+msgid "Provider"
+msgstr "Donanto"
 
 #. TRANS: Title.
 #: lib/attachmentnoticesection.php:68
 msgid "Notices where this attachment appears"
-msgstr ""
+msgstr "Avizo, kie ĉi tiu aldonaĵo aperos"
+
+#. TRANS: Title.
+#: lib/attachmenttagcloudsection.php:49
+msgid "Tags for this attachment"
+msgstr "Etikedoj por ĉi tiu aldonaĵo"
+
+#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
+msgid "Password changing failed"
+msgstr "La ŝanĝo de pasvorto maltrafis"
+
+#: lib/authenticationplugin.php:236
+msgid "Password changing is not allowed"
+msgstr "Ne estas permesita ŝanĝi la pasvorton"
 
 #. TRANS: Title for the form to block a user.
 #: lib/blockform.php:70
 msgid "Block"
 msgstr "Bloki"
 
+#: lib/channel.php:157 lib/channel.php:177
+msgid "Command results"
+msgstr "Komandaj rezultoj"
+
 #: lib/channel.php:229 lib/mailhandler.php:142
 msgid "Command complete"
-msgstr ""
+msgstr "Komando kompleta"
+
+#: lib/channel.php:240
+msgid "Command failed"
+msgstr "Komando maltrafis"
 
 #. TRANS: Command exception text shown when a notice ID is requested that does not exist.
 #: lib/command.php:84 lib/command.php:108
 msgid "Notice with that id does not exist."
-msgstr ""
+msgstr "Avizo kun tiu identigaĵo ne ekzistas."
 
 #. TRANS: Command exception text shown when a last user notice is requested and it does not exist.
 #. TRANS: Error text shown when a last user notice is requested and it does not exist.
 #: lib/command.php:101 lib/command.php:630
 msgid "User has no last notice."
-msgstr ""
+msgstr "La uzanto ne havas lastan averton."
 
 #. TRANS: Message given requesting a profile for a non-existing user.
 #. TRANS: %s is the nickname of the user for which the profile could not be found.
 #: lib/command.php:130
 #, php-format
 msgid "Could not find a user with nickname %s."
-msgstr ""
+msgstr "Ne povas trovi uzanton kun kromnomo %s."
 
 #. TRANS: Message given getting a non-existing user.
 #. TRANS: %s is the nickname of the user that could not be found.
@@ -5090,19 +5443,19 @@ msgstr ""
 #. TRANS: Error text shown when an unimplemented command is given.
 #: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
-msgstr ""
+msgstr "Pardonon, la komando ankoraŭ ne realiĝas."
 
 #. TRANS: Command exception text shown when a user tries to nudge themselves.
 #: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
-msgstr ""
+msgstr "Iom sensencas puŝeti vin mem!"
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
 #: lib/command.php:240
 #, php-format
 msgid "Nudge sent to %s."
-msgstr ""
+msgstr "Puŝeto sendiĝas al %s"
 
 #. TRANS: User statistics text.
 #. TRANS: %1$s is the number of other user the user is subscribed to.
@@ -5116,19 +5469,50 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
+msgid "Notice marked as fave."
+msgstr "Avizo ŝatiĝas."
+
 #. TRANS: Message given having added a user to a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: lib/command.php:360
 #, php-format
 msgid "%1$s joined group %2$s."
-msgstr ""
+msgstr "%1$s aniĝis al grupo %2$s."
 
 #. TRANS: Message given having removed a user from a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: lib/command.php:408
 #, php-format
 msgid "%1$s left group %2$s."
-msgstr ""
+msgstr "%1$s foriras de grupo %2$s."
+
+#. TRANS: Whois output. %s is the full name of the queried user.
+#: lib/command.php:434
+#, php-format
+msgid "Fullname: %s"
+msgstr "Plennomo: %s"
+
+#. TRANS: Whois output. %s is the location of the queried user.
+#. TRANS: Profile info line in new-subscriber notification e-mail
+#: lib/command.php:438 lib/mail.php:268
+#, php-format
+msgid "Location: %s"
+msgstr "Loko: %s"
+
+#. TRANS: Whois output. %s is the homepage of the queried user.
+#. TRANS: Profile info line in new-subscriber notification e-mail
+#: lib/command.php:442 lib/mail.php:271
+#, php-format
+msgid "Homepage: %s"
+msgstr "Hejmpaĝo: %s"
+
+#. TRANS: Whois output. %s is the bio information of the queried user.
+#: lib/command.php:446
+#, php-format
+msgid "About: %s"
+msgstr "Biografio: %s"
 
 #. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
 #: lib/command.php:474
@@ -5137,6 +5521,8 @@ msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
 "same server."
 msgstr ""
+"%s estas fora profilo; vi povas sendi rektan mesaĝon nur al uzanto je sama "
+"servilo."
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
@@ -5148,14 +5534,19 @@ msgstr ""
 #. TRANS: Error text shown sending a direct message fails with an unknown reason.
 #: lib/command.php:517
 msgid "Error sending direct message."
-msgstr ""
+msgstr "Eraris sendi rektan mesaĝon."
 
 #. TRANS: Message given having repeated a notice from another user.
 #. TRANS: %s is the name of the user for which the notice was repeated.
 #: lib/command.php:554
 #, php-format
 msgid "Notice from %s repeated."
-msgstr ""
+msgstr "Avizo de %s ripetiĝas."
+
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
+msgid "Error repeating notice."
+msgstr "Eraris ripeti avizon."
 
 #. TRANS: Message given if content of a notice for a reply is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
@@ -5163,18 +5554,25 @@ msgstr ""
 #, php-format
 msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
+"Avizo tro longas - longlimo estas %1$d lietroj, kaj via mesaĝo longas je %2"
+"$d."
 
 #. TRANS: Text shown having sent a reply to a notice successfully.
 #. TRANS: %s is the nickname of the user of the notice the reply was sent to.
 #: lib/command.php:603
 #, php-format
 msgid "Reply to %s sent."
-msgstr ""
+msgstr "Respondo al %s sendiĝas."
+
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
+msgid "Error saving notice."
+msgstr "Eraris sendi avizon."
 
 #. TRANS: Error text shown when no username was provided when issuing a subscribe command.
 #: lib/command.php:655
 msgid "Specify the name of the user to subscribe to."
-msgstr ""
+msgstr "Specifu nomon de la abonota uzanto."
 
 #. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
@@ -5205,12 +5603,27 @@ msgstr ""
 #. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
 #: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
-msgstr ""
+msgstr "Komando ankoraŭ ne realigita."
+
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
+msgid "Notification off."
+msgstr "Sciigo for."
 
 #. TRANS: Error text shown when the command "off" fails for an unknown reason.
 #: lib/command.php:731
 msgid "Can't turn off notification."
-msgstr ""
+msgstr "Malsukcesis malŝalti sciigon."
+
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
+msgid "Notification on."
+msgstr "Sciigo en."
+
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
+msgid "Can't turn on notification."
+msgstr "Malsukcesis ŝalti sciigon."
 
 #. TRANS: Error text shown when issuing the login command while login is disabled.
 #: lib/command.php:771
@@ -5229,13 +5642,27 @@ msgstr ""
 #: lib/command.php:813
 #, php-format
 msgid "Unsubscribed %s."
-msgstr ""
+msgstr "%s malaboniĝas."
+
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
+msgid "You are not subscribed to anyone."
+msgstr "Vi ne abonas iun ajn."
+
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message supports plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
+msgid "You are subscribed to this person:"
+msgid_plural "You are subscribed to these people:"
+msgstr[0] "Vi abonas jenan homon:"
+msgstr[1] "Vi abonas jenajn homojn:"
 
 #. TRANS: Text shown after requesting other users that are subscribed to a user
 #. TRANS: (followers) without having any subscribers.
 #: lib/command.php:858
 msgid "No one is subscribed to you."
-msgstr ""
+msgstr "Neniu abonas vin."
 
 #. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
 #. TRANS: This message supports plural forms. This message is followed by a
@@ -5243,10 +5670,25 @@ msgstr ""
 #: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "La homo abonas vin:"
+msgstr[1] "La homoj abonas vin:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
+msgid "You are not a member of any groups."
+msgstr "Vi ne estas grupano de iu ajn grupo."
+
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message supports plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
+msgid "You are a member of this group:"
+msgid_plural "You are a member of these groups:"
+msgstr[0] "Vi estas grupano de jena grupo:"
+msgstr[1] "Vi estas grupano de jenaj grupoj:"
+
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5288,6 +5730,44 @@ msgid ""
 "tracks - not yet implemented.\n"
 "tracking - not yet implemented.\n"
 msgstr ""
+"Komandoj:\n"
+"on - ŝalti sciigon\n"
+"off - malŝalti sciigon\n"
+"help - montri ĉi tiun helpon\n"
+"follow <nickname> - aboni uzanton\n"
+"groups - listi grupon, kiujn vi aniĝis\n"
+"subscriptions - listi viajn abonatojn\n"
+"subscribers - listi viajn abonantojn\n"
+"leave <nickname> - malabnoi uzanton\n"
+"d <nickname> <text> - sendi rektan mesaĝon al uzanto\n"
+"get <nickname> - legi la lastan avizon de uzanto\n"
+"whois <nickname> - legi profilan informon pri uzanto\n"
+"lose <nickname> - ĉesigi la uzanton de sekvi vin\n"
+"fav <nickname> - ŝati la lastan avizon de uzanto\n"
+"fav #<notice_id> - ŝati la avizon kun la ID\n"
+"repeat #<notice_id> - ripeti la avizon kun la ID\n"
+"repeat <nickname> - ripeti la lastan avizon de uzanto\n"
+"reply #<notice_id> - respondi la avizon kun la ID\n"
+"reply <nickname> - respondi la lastan avizon de uzanto\n"
+"join <group> - aniĝi al grupo\n"
+"login - havi ligilon por ensaluti al reta interfaco\n"
+"drop <group> - foriri de gruop\n"
+"stats - legi vian staton\n"
+"stop - same kiel 'off'\n"
+"quit - same kiel 'off'\n"
+"sub <nickname> - same kiel 'follow'\n"
+"unsub <nickname> - same kiel 'leave'\n"
+"last <nickname> - same kiel 'get'\n"
+"on <nickname> - ankoraŭ ne realigita.\n"
+"off <nickname> - ankoraŭ ne realigita.\n"
+"nudge <nickname> - puŝeti la uzanton, ke li ĝisdatigu!\n"
+"invite <phone number> - ankoraŭ ne realigita.\n"
+"track <word> - ankoraŭ ne realigita.\n"
+"untrack <word> - ankoraŭ ne realigita.\n"
+"track off - ankoraŭ ne realigita.\n"
+"untrack all - ankoraŭ ne realigita.\n"
+"tracks - ankoraŭ ne realigita.\n"
+"tracking -ankoraŭ ne realigita.\n"
 
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
@@ -5303,51 +5783,89 @@ msgstr ""
 
 #: lib/connectsettingsaction.php:110
 msgid "IM"
-msgstr ""
+msgstr "Tujmesaĝilo"
 
 #: lib/connectsettingsaction.php:111
 msgid "Updates by instant messenger (IM)"
-msgstr ""
+msgstr "Ĝisdatiĝo per tujmesaĝilo."
 
 #: lib/connectsettingsaction.php:116
 msgid "Updates by SMS"
-msgstr ""
+msgstr "Ĝisdatiĝo per SMM"
+
+#: lib/connectsettingsaction.php:120
+msgid "Connections"
+msgstr "Konektoj"
+
+#: lib/connectsettingsaction.php:121
+msgid "Authorized connected applications"
+msgstr "Konektitaj aplikaĵoj rajtigitaj"
 
 #: lib/dberroraction.php:60
 msgid "Database error"
+msgstr "Datumbaza eraro"
+
+#: lib/designsettings.php:105
+msgid "Upload file"
+msgstr "Alŝuti dosieron"
+
+#: lib/designsettings.php:109
+msgid ""
+"You can upload your personal background image. The maximum file size is 2MB."
 msgstr ""
+"Vi povas alŝuti vian propran fonbildon. La dosiera grandlimo estas 2MB."
+
+#: lib/designsettings.php:418
+msgid "Design defaults restored."
+msgstr "Desegnaj defaŭltoj konserviĝas."
+
+#: lib/disfavorform.php:114 lib/disfavorform.php:140
+msgid "Disfavor this notice"
+msgstr "Neŝati la avizon"
+
+#: lib/favorform.php:114 lib/favorform.php:140
+msgid "Favor this notice"
+msgstr "Ŝati la avizon"
 
 #: lib/favorform.php:140
 msgid "Favor"
-msgstr ""
+msgstr "Ŝati"
 
 #: 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 "FOAF"
 
 #: lib/feedlist.php:64
 msgid "Export data"
-msgstr ""
+msgstr "Elporti datumon"
 
 #: lib/galleryaction.php:121
 msgid "Filter tags"
-msgstr ""
+msgstr "Filtrilo-etikedoj"
+
+#: lib/galleryaction.php:131
+msgid "All"
+msgstr "Ĉiuj"
 
 #: lib/galleryaction.php:139
 msgid "Select tag to filter"
-msgstr ""
+msgstr "Eletu etikedon por filtrado"
+
+#: lib/galleryaction.php:140
+msgid "Tag"
+msgstr "Etikedo"
 
 #: lib/galleryaction.php:141
 msgid "Choose a tag to narrow list"
@@ -5362,14 +5880,86 @@ msgstr "Iri"
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
+#: lib/groupeditform.php:163
+msgid "URL of the homepage or blog of the group or topic"
+msgstr "URL de la hejmpaĝo aŭ blogo de la grupo aŭ temo"
+
 #: lib/groupeditform.php:168
 msgid "Describe the group or topic"
+msgstr "Priskribo de grupo aŭ temo"
+
+#: lib/groupeditform.php:170
+#, php-format
+msgid "Describe the group or topic in %d characters"
+msgstr "Priskribo de grupo aŭ temo, apenaŭ je %d literoj"
+
+#: lib/groupeditform.php:179
+msgid ""
+"Location for the group, if any, like \"City, State (or Region), Country\""
 msgstr ""
+"Loko de la grupo, se iu ajn, ekzemple \"Urbo, Stato (aŭ Regiono), Lando\""
 
 #: lib/groupeditform.php:187
 #, php-format
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
+"Kromaj alnomoj por la grupo, apartigita per komo aŭ spaco, apenaŭ %d literoj"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Grupo"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Grupo %s"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "Grupanoj"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "Grupanoj de %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Blokito"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "Blokito de %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "Redakti agordon de grupo %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Emblemo"
 
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
@@ -5377,7 +5967,7 @@ msgstr ""
 #, php-format
 msgctxt "TOOLTIP"
 msgid "Add or edit %s logo"
-msgstr ""
+msgstr "Aldoni aŭ redakti emblemon de %s"
 
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
@@ -5385,21 +5975,25 @@ msgstr ""
 #, php-format
 msgctxt "TOOLTIP"
 msgid "Add or edit %s design"
-msgstr ""
+msgstr "Aldoni aŭ redakti desegnon de %s"
+
+#: lib/groupsbymemberssection.php:71
+msgid "Groups with most members"
+msgstr "Grupoj kun plej multe da membroj"
 
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
-msgstr ""
+msgstr "Grupoj kun plej multe da avizoj"
 
 #: lib/grouptagcloudsection.php:56
 #, php-format
 msgid "Tags in %s group's notices"
-msgstr ""
+msgstr "Etikedoj en avizoj de gruop %s"
 
 #. TRANS: Client exception 406
 #: lib/htmloutputter.php:104
 msgid "This page is not available in a media type you accept"
-msgstr ""
+msgstr "La paĝo estas ne havebla je la komunikil-tipo, kiun vi akceptas"
 
 #. TRANS: Client exception thrown when a file upload operation has failed with an unknown reason.
 #: lib/imagefile.php:101 lib/mediafile.php:179
@@ -5412,38 +6006,46 @@ msgstr ""
 
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
-msgstr ""
+msgstr "Nekonata dosiertipo"
 
 #: lib/imagefile.php:244
 msgid "MB"
-msgstr ""
+msgstr "MB"
 
 #: lib/imagefile.php:246
 msgid "kB"
-msgstr ""
+msgstr "kB"
 
 #: lib/jabber.php:387
 #, php-format
 msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
 
 #: lib/jabber.php:567
 #, php-format
 msgid "Unknown inbox source %d."
-msgstr ""
+msgstr "Nekonata alvenkesta fonto %d"
+
+#: lib/joinform.php:114
+msgid "Join"
+msgstr "Aniĝi"
 
 #: lib/leaveform.php:114
 msgid "Leave"
 msgstr "Forlasi"
 
+#: lib/logingroupnav.php:80
+msgid "Login with a username and password"
+msgstr "Ensaluti per via uzantnomo kaj pasvorto."
+
 #: lib/logingroupnav.php:86
 msgid "Sign up for a new account"
-msgstr ""
+msgstr "Krei novan konton"
 
 #. TRANS: Subject for address confirmation email
 #: lib/mail.php:174
 msgid "Email address confirmation"
-msgstr ""
+msgstr "Retpoŝtadresa konfirmo"
 
 #. TRANS: Body for address confirmation email.
 #: lib/mail.php:177
@@ -5463,12 +6065,20 @@ msgid ""
 "%s\n"
 msgstr ""
 
+#. TRANS: Subject of new-subscriber notification e-mail
+#: lib/mail.php:243
+#, php-format
+msgid "%1$s is now listening to your notices on %2$s."
+msgstr "%1$s nun rigardas viajn avizojn ĉe %2$s."
+
 #: lib/mail.php:248
 #, php-format
 msgid ""
 "If you believe this account is being used abusively, you can block them from "
 "your subscribers list and report as spam to site administrators at %s"
 msgstr ""
+"Se vi kredas, ke ĉi tiun konton iu misuzas, vi rajtas bloki ĝin de via "
+"abonanto-listo kaj raporti ĝin kiel rubmesaĝanto al administrantoj ĉe %s"
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
@@ -5486,6 +6096,18 @@ msgid ""
 "Change your email address or notification options at %8$s\n"
 msgstr ""
 
+#. TRANS: Profile info line in new-subscriber notification e-mail
+#: lib/mail.php:274
+#, php-format
+msgid "Bio: %s"
+msgstr "Biografio: %s"
+
+#. TRANS: Subject of notification mail for new posting email address
+#: lib/mail.php:304
+#, php-format
+msgid "New email address for posting to %s"
+msgstr "Nova retpoŝta adreso por afiŝi ĉe %s"
+
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
 #, php-format
@@ -5500,17 +6122,28 @@ msgid ""
 "%4$s"
 msgstr ""
 
+#. TRANS: Subject line for SMS-by-email notification messages
+#: lib/mail.php:433
+#, php-format
+msgid "%s status"
+msgstr "%s stato"
+
+#. TRANS: Subject line for SMS-by-email address confirmation message
+#: lib/mail.php:460
+msgid "SMS confirmation"
+msgstr "SMS-a konfirmo"
+
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
 msgid "%s: confirm you own this phone number with this code:"
-msgstr ""
+msgstr "%s: konfirmi ke vi havas la telefonnumeron per tiu ĉi kodo:"
 
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
 msgid "You've been nudged by %s"
-msgstr ""
+msgstr "Vin puŝetis %s"
 
 #. TRANS: Body for 'nudge' notification email
 #: lib/mail.php:489
@@ -5529,6 +6162,12 @@ msgid ""
 "%4$s\n"
 msgstr ""
 
+#. TRANS: Subject for direct-message notification email
+#: lib/mail.php:536
+#, php-format
+msgid "New private message from %s"
+msgstr "Nova privata mesaĝo de %s"
+
 #. TRANS: Body for direct-message notification email
 #: lib/mail.php:541
 #, php-format
@@ -5549,6 +6188,12 @@ msgid ""
 "%5$s\n"
 msgstr ""
 
+#. TRANS: Subject for favorite notification email
+#: lib/mail.php:589
+#, php-format
+msgid "%s (@%s) added your notice as a favorite"
+msgstr "%s (@%s) ŝatis vian avizon"
+
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
 #, php-format
@@ -5579,6 +6224,9 @@ msgid ""
 "\n"
 "\t%s"
 msgstr ""
+"La tutan interparolon oni povas legi jene:\n"
+"\n"
+"%s"
 
 #: lib/mail.php:657
 #, php-format
@@ -5615,17 +6263,19 @@ msgstr ""
 
 #: lib/mailbox.php:89
 msgid "Only the user can read their own mailboxes."
-msgstr ""
+msgstr "Nur uzanto povas legi sian propran paŝton."
 
 #: 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 ""
+"Vi ne ricevis privatan mesaĝon. Vi povas sendi privatan mesaĝon al iu kaj "
+"interparoli kun ili. Homo sendas al vi mesaĝon al vi sole."
 
 #: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr ""
+msgstr "de"
 
 #. TRANS: Client exception thrown when a database error was thrown during a file upload operation.
 #: lib/mediafile.php:99 lib/mediafile.php:125
@@ -5712,45 +6362,56 @@ msgstr "Sendi"
 #: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
-msgstr ""
+msgstr "Kio novas, %s?"
 
 #: lib/noticeform.php:193
 msgid "Attach"
-msgstr ""
+msgstr "Aldoni"
 
 #: lib/noticeform.php:197
 msgid "Attach a file"
-msgstr ""
+msgstr "Aldoni dosieron"
 
 #: lib/noticeform.php:213
 msgid "Share my location"
-msgstr ""
+msgstr "Sciigi mian lokon"
+
+#: lib/noticeform.php:216
+msgid "Do not share my location"
+msgstr "Ne sciigi mian lokon"
 
 #: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
+"Pardonon, legi vian lokon estas pli malrapide, ol ni pensis. Bonvolu reprovi "
+"poste."
+
+#. TRANS: Used in coordinates as abbreviation of north
+#: lib/noticelist.php:436
+msgid "N"
+msgstr "N"
 
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
-msgstr ""
+msgstr "S"
 
 #. TRANS: Used in coordinates as abbreviation of east
 #: lib/noticelist.php:440
 msgid "E"
-msgstr ""
+msgstr "E"
 
 #. TRANS: Used in coordinates as abbreviation of west
 #: lib/noticelist.php:442
 msgid "W"
-msgstr ""
+msgstr "W"
 
 #: lib/noticelist.php:444
 #, 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:453
 msgid "at"
@@ -5758,23 +6419,76 @@ msgstr "al"
 
 #: lib/noticelist.php:502
 msgid "web"
-msgstr ""
+msgstr "reto"
+
+#: lib/noticelist.php:568
+msgid "in context"
+msgstr "kuntekste"
+
+#: lib/noticelist.php:630
+msgid "Reply to this notice"
+msgstr "Respondi ĉi tiun avizon"
 
 #: lib/noticelist.php:631
 msgid "Reply"
-msgstr ""
+msgstr "Respondi"
+
+#: lib/noticelist.php:675
+msgid "Notice repeated"
+msgstr "Avizo ripetiĝas"
+
+#: lib/nudgeform.php:116
+msgid "Nudge this user"
+msgstr "Puŝeti la uzanton"
+
+#: lib/nudgeform.php:128
+msgid "Nudge"
+msgstr "Puŝeti"
 
 #: lib/nudgeform.php:128
 msgid "Send a nudge to this user"
-msgstr ""
+msgstr "Sendi puŝeton al la uzanto"
+
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "Eraris enmeti novan profilon"
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "Eraris enmeti novan vizaĝbildon."
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "Eraris enmeti foran profilon."
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "Refoja avizo."
+
+#: lib/oauthstore.php:491
+msgid "Couldn't insert new subscription."
+msgstr "Eraris enmeti novan abonon."
+
+#: lib/personalgroupnav.php:99
+msgid "Personal"
+msgstr "Persona"
 
 #: lib/personalgroupnav.php:104
 msgid "Replies"
-msgstr ""
+msgstr "Respondoj"
+
+#: lib/personalgroupnav.php:114
+msgid "Favorites"
+msgstr "Ŝatolisto"
 
 #: lib/personalgroupnav.php:125
 msgid "Inbox"
-msgstr ""
+msgstr "Alvenkesto"
+
+#: lib/personalgroupnav.php:126
+msgid "Your incoming messages"
+msgstr "Viaj alvenaj mesaĝoj"
 
 #: lib/personaltagcloudsection.php:56
 #, php-format
@@ -5821,26 +6535,39 @@ msgstr ""
 #. TRANS: Fieldset legend for the search form.
 #: lib/searchaction.php:121
 msgid "Search site"
-msgstr ""
+msgstr "Serĉi ĉe retejo"
 
 #. TRANS: Used as a field label for the field where one or more keywords
 #. TRANS: for searching can be entered.
 #: lib/searchaction.php:129
 msgid "Keyword(s)"
-msgstr ""
+msgstr "Serĉvorto(j)"
+
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Serĉi"
 
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
-msgstr ""
+msgstr "Serĉa gvido"
+
+#: lib/searchgroupnav.php:80
+msgid "People"
+msgstr "Homon"
 
 #: lib/searchgroupnav.php:81
 msgid "Find people on this site"
-msgstr ""
+msgstr "Serĉi homon ĉe la retejo"
 
 #: lib/searchgroupnav.php:83
 msgid "Find content of notices"
-msgstr ""
+msgstr "Serĉi enhavon ĉe la retejo"
+
+#: lib/searchgroupnav.php:85
+msgid "Find groups on this site"
+msgstr "Serĉi grupon ĉe la retejo"
 
 #: lib/section.php:89
 msgid "Untitled section"
@@ -5854,15 +6581,33 @@ msgstr "Pli..."
 msgid "Silence"
 msgstr "Silento"
 
+#: lib/silenceform.php:78
+msgid "Silence this user"
+msgstr "Silentigi la uzanton"
+
 #: lib/subgroupnav.php:83
 #, php-format
 msgid "People %s subscribes to"
-msgstr ""
+msgstr "Abonatoj de %s"
 
 #: lib/subgroupnav.php:91
 #, php-format
 msgid "People subscribed to %s"
-msgstr ""
+msgstr "Abonantoj de %s"
+
+#: lib/subgroupnav.php:99
+#, php-format
+msgid "Groups %s is a member of"
+msgstr "Grupoj de %s"
+
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Inviti"
+
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Inviti amikojn kaj kolegojn al %s kun vi"
 
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -5916,12 +6661,20 @@ msgstr ""
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
-msgstr ""
+msgstr "Pintaj afiŝantoj"
 
 #: lib/unsandboxform.php:69
 msgid "Unsandbox"
 msgstr ""
 
+#: lib/unsilenceform.php:67
+msgid "Unsilence"
+msgstr "Nesilentigi"
+
+#: lib/unsilenceform.php:78
+msgid "Unsilence this user"
+msgstr "Nesilentigi la uzanton"
+
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
 msgstr ""
@@ -5930,6 +6683,10 @@ msgstr ""
 msgid "Unsubscribe"
 msgstr "Malaboni"
 
+#: lib/userprofile.php:117
+msgid "Edit Avatar"
+msgstr "Redakti vizaĝbildon"
+
 #: lib/userprofile.php:234 lib/userprofile.php:248
 msgid "User actions"
 msgstr "Nekonata ago"
@@ -5971,15 +6728,47 @@ msgid "about a minute ago"
 msgstr "antaŭ ĉirkaŭ unu minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "antaŭ ĉirkaŭ unu horo"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "antaŭ ĉirkaŭ unu tago"
 
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
index 22692c8915d7d73e960b6af657511a4cf4d5c455..22cd7512f0840829a3962987bec475e63188043a 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Spanish (Español)
+# Translation of StatusNet - Core to Spanish (Español)
 # Expored from translatewiki.net
 #
 # Author: Brion
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:52+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:40+0000\n"
 "Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: es\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1902,10 +1902,28 @@ msgstr "Lista de los usuarios en este grupo."
 msgid "Admin"
 msgstr "Admin"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Convertir al usuario en administrador del grupo"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5533,14 +5551,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5974,7 +6008,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Eres miembro de este grupo:"
 msgstr[1] "Eres miembro de estos grupos:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6017,43 +6051,43 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 "comandos:\n"
-"activar - activar notificaciones\n"
-"desactivar - desactivar notificaciones\n"
-"ayuda - mostrar esta ayuda\n"
-"seguir <usuario> - suscribirse al usuario\n"
-"grupos - listar los grupos que sigues\n"
-"suscripciones - listar las personas que sigues\n"
-"suscriptores - listar los grupos que te siguen\n"
-"abandonar <usuario> - cancelar la suscripción al usuario\n"
+"on - activar notificaciones\n"
+"off - desactivar notificaciones\n"
+"help - mostrar esta ayuda\n"
+"follow <usuario> - suscribirse al usuario\n"
+"groups - listar los grupos que sigues\n"
+"subscriptions - listar las personas que sigues\n"
+"subscribers - listar los grupos que te siguen\n"
+"leave <usuario> - cancelar la suscripción al usuario\n"
 "d <usuario> <text> - dirigir mensaje al usuario\n"
-"obtener <usuario> - obtener último aviso del usuario\n"
-"quienes <usuario> - obtener información del perfil del usuario\n"
-"bloquear <usuario> - obligar al usuario a que deje de seguirte\n"
+"get <usuario> - obtener último aviso del usuario\n"
+"whois <usuario> - obtener información del perfil del usuario\n"
+"lose <usuario> - obligar al usuario a que deje de seguirte\n"
 "fav <usuario> - añadir el último aviso del usario a tus favoritos\n"
 "fav #<id_aviso> - añadir el aviso con el ID dado a tus favoritos\n"
-"repetir #<id_aviso> - repetir el aviso con el ID dado\n"
-"repetir <usuario> - repetir el último aviso del usuario\n"
-"responder #<id_aviso> - responder al aviso del ID dado\n"
-"responder <usuario> - responder al último aviso del usuario\n"
-"unirse <grupo> - unirse a un grupo\n"
-"entrar - obtener un vínculo para iniciar sesión en la interfaz Web\n"
-"abandonar <grupo> - abandonar el grupo\n"
-"estadísticas - obtener tus estadísticas\n"
-"detener - igual que 'desactivar'\n"
-"parar - igual que 'desactivar'\n"
-"sus <usuario> - igual que 'seguir'\n"
-"desus <usuario> - igual que 'abandonar'\n"
-"último <usuario> - igual que 'obtener'\n"
-"activado <usuario> - aún sin implementar.\n"
-"desactivado <usuario> - aún sin implementar.\n"
-"toque <usuario> - recordarle a un ausuario que actualice.\n"
-"invitar <phone number> - aún sin implementar.\n"
-"rastrear <word> - aún sin implementar.\n"
-"no rastrear <word> - aún sin implementar.\n"
-"dejar de rastrear - aún sin implementar.\n"
-"dejar de rastrear todos - aún sin implementar.\n"
-"rastrear - aún sin implementar.\n"
-"rastreando - aún sin implementar.\n"
+"repeat #<id_aviso> - repetir el aviso con el ID dado\n"
+"repeat <usuario> - repetir el último aviso del usuario\n"
+"reply #<id_aviso> - responder al aviso del ID dado\n"
+"reply <usuario> - responder al último aviso del usuario\n"
+"join <grupo> - unirse a un grupo\n"
+"login - obtener un vínculo para iniciar sesión en la interfaz Web\n"
+"drop <grupo> - abandonar el grupo\n"
+"stats - obtener tus estadísticas\n"
+"stop - igual que 'desactivar'\n"
+"quit - igual que 'desactivar'\n"
+"sub <usuario> - igual que 'seguir'\n"
+"unsub <usuario> - igual que 'abandonar'\n"
+"last <usuario> - igual que 'obtener'\n"
+"on <usuario> - aún sin implementar.\n"
+"off <usuario> - aún sin implementar.\n"
+"nudge <usuario> - recordarle a un ausuario que actualice.\n"
+"invite <phone number> - aún sin implementar.\n"
+"track <word> - aún sin implementar.\n"
+"untrack <word> - aún sin implementar.\n"
+"track off - aún sin implementar.\n"
+"untrack all - aún sin implementar.\n"
+"tracks - aún sin implementar.\n"
+"tracking - aún sin implementar.\n"
 
 #: lib/common.php:135
 msgid "No configuration file found. "
@@ -6197,6 +6231,78 @@ msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 "Nombres adicionales para el grupo, separados por comas o espacios. Máximo: %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupos con más miembros"
@@ -6693,6 +6799,23 @@ msgstr "El archivo no se pudo mover al directorio de destino."
 msgid "Could not determine file's MIME type."
 msgstr "No se pudo determinar tipo MIME del archivo"
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Enviar un aviso directo"
@@ -6808,6 +6931,23 @@ msgstr "Dar un toque a "
 msgid "Send a nudge to this user"
 msgstr "Dar un toque a este usuario"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "No se pudo insertar una nueva suscripción."
@@ -6951,6 +7091,11 @@ msgstr "Buscar sitio"
 msgid "Keyword(s)"
 msgstr "Palabra(s) clave"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7162,22 +7307,54 @@ msgid "about a minute ago"
 msgstr "hace un minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "hace una hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "hace un día"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "hace un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "hace un año"
 
index 6af53edae34f45906bf5fb4d58c11c1f9fef588b..48982013ce530c45528ef983f559e866f436088d 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Persian (فارسی)
+# Translation of StatusNet - Core to Persian (فارسی)
 # Expored from translatewiki.net
 #
 # Author: ArianHT
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:54+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:45+0000\n"
 "Last-Translator: Ahmad Sufi Mahmudi\n"
 "Language-Team: Persian <http://translatewiki.net/wiki/Portal:fa>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Language-Code: fa\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1869,10 +1869,28 @@ msgstr "یک فهرست از کاربران در این گروه"
 msgid "Admin"
 msgstr "مدیر"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "کاربر یک مدیر گروه شود"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5376,14 +5394,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5809,7 +5843,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "شما یک عضو این گروه هستید:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6021,6 +6055,78 @@ msgstr "مکان گروه، در صورت وجود داشتن، مانند «ش
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr "نام‌های مستعار اضافی برای گروه، با کاما- یا فاصله- جدا شود، بیشینه %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "گروه های با اعضاء بیشتر"
@@ -6504,6 +6610,23 @@ msgstr "فایل نتوانست به دایرکتوری مقصد منتقل شو
 msgid "Could not determine file's MIME type."
 msgstr "نمی‌توان فرمت پرونده را تعیین کرد."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "فرستادن یک پیام مستقیم"
@@ -6614,6 +6737,23 @@ msgstr "یادآوری‌کردن"
 msgid "Send a nudge to this user"
 msgstr "یک یادآوری به این کاربر فرستاده شود"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "نمی‌توان اشتراک تازه‌ای افزود."
@@ -6745,6 +6885,11 @@ msgstr "جست‌وجوی وب‌گاه"
 msgid "Keyword(s)"
 msgstr "کلمه(های) کلیدی"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6932,22 +7077,50 @@ msgid "about a minute ago"
 msgstr "حدود یک دقیقه پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "حدود یک ساعت پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "حدود یک روز پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "حدود یک ماه پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "حدود یک سال پیش"
 
index fd00b99d7d82d8e4bab3fe6700db7939b98f578f..b67a82c9a9b028528e1bc7ff69358d19d561bf4e 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Finnish (Suomi)
+# Translation of StatusNet - Core to Finnish (Suomi)
 # Expored from translatewiki.net
 #
 # Author: Crt
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:53+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:42+0000\n"
 "Language-Team: Finnish <http://translatewiki.net/wiki/Portal:fi>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: fi\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
@@ -1492,10 +1492,28 @@ msgstr "Lista ryhmän käyttäjistä."
 msgid "Admin"
 msgstr "Ylläpito"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Tee tästä käyttäjästä ylläpitäjä"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4145,14 +4163,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -4424,7 +4448,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Sinä et kuulu tähän ryhmään."
 msgstr[1] "Sinä et kuulu tähän ryhmään."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4573,6 +4597,78 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Ryhmät, joissa eniten jäseniä"
@@ -5056,6 +5152,23 @@ msgstr "Tönäise"
 msgid "Send a nudge to this user"
 msgstr "Lähetä tönäisy tälle käyttäjälle"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Ei voitu lisätä uutta tilausta."
@@ -5160,6 +5273,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Henkilö"
@@ -5322,22 +5440,54 @@ msgid "about a minute ago"
 msgstr "noin minuutti sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "noin tunti sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "noin päivä sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "noin kuukausi sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "noin vuosi sitten"
 
index 3d33750341fc1b138a6da382ada8598bfb645e8c..ccd133acdf938fdf2ee9f5b4bf38d3613a78086e 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to French (Français)
+# Translation of StatusNet - Core to French (Français)
 # Expored from translatewiki.net
 #
 # Author: Brion
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:55+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:50+0000\n"
 "Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: fr\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1911,10 +1911,28 @@ msgstr "Liste des utilisateurs inscrits à ce groupe."
 msgid "Admin"
 msgstr "Administrer"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Faire de cet utilisateur un administrateur du groupe"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5572,14 +5590,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -6018,7 +6052,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Vous êtes membre de ce groupe :"
 msgstr[1] "Vous êtes membre de ces groupes :"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6244,6 +6278,78 @@ msgstr ""
 "Pseudos supplémentaires pour le groupe, séparés par des virgules ou des "
 "espaces, %d au maximum"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Groupes avec le plus de membres"
@@ -6740,6 +6846,23 @@ msgstr "Le fichier n’a pas pu être déplacé dans le dossier de destination."
 msgid "Could not determine file's MIME type."
 msgstr "Impossible de déterminer le type MIME du fichier."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Envoyer un message direct"
@@ -6855,6 +6978,23 @@ msgstr "Clin d’œil"
 msgid "Send a nudge to this user"
 msgstr "Envoyer un clin d’œil à cet utilisateur"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Impossible d’insérer un nouvel abonnement."
@@ -6998,6 +7138,11 @@ msgstr "Rechercher sur le site"
 msgid "Keyword(s)"
 msgstr "Mot(s) clef(s)"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7212,22 +7357,54 @@ msgid "about a minute ago"
 msgstr "il y a 1 minute"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "il y a 1 heure"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "il y a 1 jour"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "il y a 1 mois"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "il y a environ 1 an"
 
index e69fe18318d8dfeb62852d0bea4b8fb234d3a2db..b306b5ef0ff7b0e269c771ce8219a002ba4e3eb9 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Irish (Gaeilge)
+# Translation of StatusNet - Core to Irish (Gaeilge)
 # Expored from translatewiki.net
 #
 # Author: McDutchie
@@ -7,20 +7,20 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:52+0000\n"
 "Language-Team: Irish <http://translatewiki.net/wiki/Portal:ga>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ga\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=5; plural=(n == 1) ? 0 : ( (n == 2) ? 1 : ( (n < 7) ? "
 "2 : ( (n < 11) ? 3 : 4 ) ) );\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
@@ -1206,6 +1206,12 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr ""
@@ -3687,14 +3693,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -4105,6 +4117,42 @@ msgctxt "MENU"
 msgid "Group"
 msgstr ""
 
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:120
@@ -4113,6 +4161,12 @@ msgctxt "TOOLTIP"
 msgid "Edit %s group properties"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -4554,6 +4608,23 @@ msgstr ""
 msgid "Reply"
 msgstr "Respostas"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Non se puido inserir a nova subscrición."
@@ -4646,6 +4717,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Xente"
@@ -4774,22 +4850,66 @@ msgid "about a minute ago"
 msgstr "fai un minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "fai unha hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "fai un día"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "fai un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "fai un ano"
 
index 44a206e654f0bc796ada930cc32c6baac420fbcc..e2322622e06e4a00d6b187e3ecf9ba33f59151b6 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Galician (Galego)
+# Translation of StatusNet - Core to Galician (Galego)
 # Expored from translatewiki.net
 #
 # Author: Gallaecio
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:58+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:54+0000\n"
 "Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: gl\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1899,10 +1899,28 @@ msgstr "Unha lista dos usuarios pertencentes a este grupo."
 msgid "Admin"
 msgstr "Administrador"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Bloquear"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Converter ao usuario en administrador do grupo"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Converter en administrador"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Converter a este usuario en administrador"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5538,14 +5556,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5979,7 +6013,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Vostede pertence a este grupo:"
 msgstr[1] "Vostede pertence a estes grupos:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6203,6 +6237,78 @@ msgstr ""
 "Alcumes adicionais para o grupo, separados por comas ou espazos, %d como "
 "máximo"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Grupo"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Grupo %s"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "Membros"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "Membros do grupo %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Bloqueado"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "Usuarios bloqueados en %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "Modificar as propiedades do grupo %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Logotipo"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "Engadir ou modificar o logotipo de %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "Engadir ou modificar o deseño de %s"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupos con máis membros"
@@ -6695,6 +6801,23 @@ msgstr "Non se puido mover o ficheiro ao directorio de destino."
 msgid "Could not determine file's MIME type."
 msgstr "Non se puido determinar o tipo MIME do ficheiro."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr "Neste servidor non se soporta o tipo de ficheiro \"%s\"."
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Enviar unha nota directa"
@@ -6810,6 +6933,23 @@ msgstr "Facer un aceno"
 msgid "Send a nudge to this user"
 msgstr "Facerlle un aceno a este usuario"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "Houbo un erro ao inserir o novo perfil."
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "Houbo un erro ao inserir o avatar."
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "Houbo un erro ao inserir o perfil remoto."
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "Nota duplicada."
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Non se puido inserir unha subscrición nova."
@@ -6953,6 +7093,11 @@ msgstr "Buscar no sitio"
 msgid "Keyword(s)"
 msgstr "Termos de busca"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Procurar"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7165,22 +7310,54 @@ msgid "about a minute ago"
 msgstr "hai como un minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "hai como unha hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "hai como un día"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "hai como un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "hai como un ano"
 
index 3b4dcb6be4b50ecd41583ec0f12b0bb753d1f978..ce4ca83ffc21879104492c105a884b464fd3b775 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Hebrew (עברית)
+# Translation of StatusNet - Core to Hebrew (עברית)
 # Expored from translatewiki.net
 #
 # --
@@ -6,19 +6,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:53:59+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:55+0000\n"
 "Language-Team: Hebrew <http://translatewiki.net/wiki/Portal:he>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: he\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
@@ -1076,6 +1076,12 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr ""
@@ -3414,14 +3420,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -3713,7 +3725,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "לא שלחנו אלינו את הפרופיל הזה"
 msgstr[1] "לא שלחנו אלינו את הפרופיל הזה"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -3850,6 +3862,48 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:120
@@ -3858,6 +3912,12 @@ msgctxt "TOOLTIP"
 msgid "Edit %s group properties"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -4259,6 +4319,23 @@ msgstr ""
 msgid "Send a nudge to this user"
 msgstr ""
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "הכנסת מנוי חדש נכשלה."
@@ -4356,6 +4433,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "אנשים"
@@ -4497,22 +4579,54 @@ msgid "about a minute ago"
 msgstr "לפני כדקה"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "לפני כשעה"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "לפני כיום"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "לפני כחודש"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "לפני כשנה"
 
index c1735aad175ffda599c670ae0d12274eb07f1015..05bd870d6304bcd2e39efe44bbdaf71b99338a1e 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Upper Sorbian (Hornjoserbsce)
+# Translation of StatusNet - Core to Upper Sorbian (Hornjoserbsce)
 # Expored from translatewiki.net
 #
 # Author: Brion
@@ -9,20 +9,20 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:00+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:57+0000\n"
 "Language-Team: Upper Sorbian <http://translatewiki.net/wiki/Portal:hsb>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: hsb\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || "
 "n%100==4) ? 2 : 3)\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1750,10 +1750,28 @@ msgstr "Lisćina wužiwarjow w tutej skupinje."
 msgid "Admin"
 msgstr "Administrator"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Wužiwarja k administratorej skupiny činić"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4710,9 +4728,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5130,7 +5159,7 @@ msgstr[1] "Sy čłon tuteju skupinow:"
 msgstr[2] "Sy čłon tutych skupinow:"
 msgstr[3] "Sy čłon tutych skupinow:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5294,6 +5323,62 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -5686,6 +5771,23 @@ msgstr "Dataja njeda so do ciloweho zapisa přesunyć."
 msgid "Could not determine file's MIME type."
 msgstr "MIME-typ dataje njeda so zwěsćić."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Direktnu zdźělenku pósłać"
@@ -5791,6 +5893,23 @@ msgstr "Zdźělenka wospjetowana"
 msgid "Nudge"
 msgstr ""
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Nowy abonement njeda so zasunyć."
@@ -5917,6 +6036,11 @@ msgstr "Pytanske sydło"
 msgid "Keyword(s)"
 msgstr "Klučowe hesła"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6102,22 +6226,62 @@ msgid "about a minute ago"
 msgstr "před něhdźe jednej mjeńšinu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "před něhdźe jednej hodźinu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "před něhdźe jednym dnjom"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "před něhdźe jednym měsacom"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "před něhdźe jednym lětom"
 
index a8e55d6856bd1c8c7347e4bed710baaa200cce12..aa3e0c055aceeeaf6d07a2ba3a2c03e233011ef3 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Interlingua (Interlingua)
+# Translation of StatusNet - Core to Interlingua (Interlingua)
 # Expored from translatewiki.net
 #
 # Author: McDutchie
@@ -7,19 +7,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:01+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:07:58+0000\n"
 "Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ia\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1892,10 +1892,28 @@ msgstr "Un lista de usatores in iste gruppo."
 msgid "Admin"
 msgstr "Administrator"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Blocar"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Facer le usator administrator del gruppo"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Facer admin"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Facer iste usator un administrator"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5507,17 +5525,33 @@ msgstr ""
 #. TRANS: OAuth exception thrown when no application is found for a given consumer key.
 #: lib/apiauth.php:175
 msgid "No application for that consumer key."
-msgstr ""
+msgstr "Nulle application pro iste clave de consumitor."
+
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr "Mal indicio de accesso."
 
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
-msgstr ""
+msgstr "Nulle usator pro iste indicio."
+
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr "Non poteva authenticar te."
 
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
-msgstr ""
+msgid "Tried to revoke unknown token."
+msgstr "Tentava revocar un indicio non cognoscite."
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
+msgstr "Falleva de deler le indicio revocate."
 
 #. TRANS: Form legend.
 #: lib/applicationeditform.php:129
@@ -5950,7 +5984,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Tu es membro de iste gruppo:"
 msgstr[1] "Tu es membro de iste gruppos:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6172,6 +6206,78 @@ 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"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Gruppo"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Gruppo %s"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "Membros"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "Membros del gruppo %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Blocate"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "%s usatores blocate"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "Modificar proprietates del gruppo %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Logotypo"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "Adder o modificar logotypo de %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "Adder o modificar apparentia de %s"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Gruppos con le plus membros"
@@ -6664,6 +6770,25 @@ msgstr "File non poteva esser displaciate in le directorio de destination."
 msgid "Could not determine file's MIME type."
 msgstr "Non poteva determinar le typo MIME del file."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+"\"%1$s\" non es un typo de file supportate in iste servitor. Tenta usar un "
+"altere formato de %2$s."
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr "\"%s\" non es un typo de file supportate in iste servitor."
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Inviar un nota directe"
@@ -6779,6 +6904,23 @@ msgstr "Pulsar"
 msgid "Send a nudge to this user"
 msgstr "Inviar un pulsata a iste usator"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "Error durante le insertion del nove profilo."
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "Error durante le insertion del avatar."
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "Error durante le insertion del profilo remote."
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "Nota duplicate."
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Non poteva inserer nove subscription."
@@ -6922,6 +7064,11 @@ msgstr "Cercar in sito"
 msgid "Keyword(s)"
 msgstr "Parola(s)-clave"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Cercar"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7136,22 +7283,54 @@ msgid "about a minute ago"
 msgstr "circa un minuta retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] "un minuta"
+msgstr[1] "%d minutas"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "circa un hora retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] "un hora"
+msgstr[1] "%d horas"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "circa un die retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] "un die"
+msgstr[1] "%d dies"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "circa un mense retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] "un mense"
+msgstr[1] "%d menses"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "circa un anno retro"
 
index 177c00e08a4ad9476da73c46b6ffbf9710ce2fb4..d9819ca594facdc82b264b73feb73cab03454331 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Icelandic (Íslenska)
+# Translation of StatusNet - Core to Icelandic (Íslenska)
 # Expored from translatewiki.net
 #
 # Author: McDutchie
@@ -7,19 +7,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:02+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:00+0000\n"
 "Language-Team: Icelandic <http://translatewiki.net/wiki/Portal:is>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: is\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
@@ -1263,10 +1263,22 @@ msgstr "Listi yfir notendur í þessum hóp."
 msgid "Admin"
 msgstr "Stjórnandi"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr ""
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
 #. TRANS: Submit button title.
 #: actions/groupmembers.php:537
 msgctxt "TOOLTIP"
@@ -3890,14 +3902,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -4197,7 +4215,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Þú ert ekki meðlimur í þessum hópi."
 msgstr[1] "Þú ert ekki meðlimur í þessum hópi."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4343,6 +4361,78 @@ msgstr "Staðsetning hópsins, ef einhver, eins og \"Borg, landshluti, land\""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Hóparnir með flestu meðlimina"
@@ -4811,6 +4901,23 @@ msgstr "Pot"
 msgid "Send a nudge to this user"
 msgstr "Ýta við þessum notanda"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Gat ekki sett inn nýja áskrift."
@@ -4920,6 +5027,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Fólk"
@@ -5087,22 +5199,54 @@ msgid "about a minute ago"
 msgstr "fyrir um einni mínútu síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "fyrir um einum klukkutíma síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "fyrir um einum degi síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "fyrir um einum mánuði síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "fyrir um einu ári síðan"
 
index 35f4b1c1f2d04a919445aa978750ece239fefb31..505f6abaf2b1ef05045e85e3581b27fe1ef551b2 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Italian (Italiano)
+# Translation of StatusNet - Core to Italian (Italiano)
 # Expored from translatewiki.net
 #
 # Author: HalphaZ
@@ -9,19 +9,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:04+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:01+0000\n"
 "Language-Team: Italian <http://translatewiki.net/wiki/Portal:it>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: it\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1884,10 +1884,28 @@ msgstr "Un elenco degli utenti in questo gruppo."
 msgid "Admin"
 msgstr "Amministra"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Rende l'utente amministratore del gruppo"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5452,14 +5470,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5890,7 +5924,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Non fai parte di questo gruppo:"
 msgstr[1] "Non fai parte di questi gruppi:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6115,6 +6149,78 @@ msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 "Soprannomi aggiuntivi per il gruppo, separati da virgole o spazi, max %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "I gruppi più numerosi"
@@ -6609,6 +6715,23 @@ msgstr "Impossibile spostare il file nella directory di destinazione."
 msgid "Could not determine file's MIME type."
 msgstr "Impossibile determinare il tipo MIME del file."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Invia un messaggio diretto"
@@ -6724,6 +6847,23 @@ msgstr "Richiama"
 msgid "Send a nudge to this user"
 msgstr "Invia un richiamo a questo utente"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Impossibile inserire un nuovo abbonamento."
@@ -6867,6 +7007,11 @@ msgstr "Cerca nel sito"
 msgid "Keyword(s)"
 msgstr "Parole"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7077,22 +7222,54 @@ msgid "about a minute ago"
 msgstr "circa un minuto fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "circa un'ora fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "circa un giorno fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "circa un mese fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "circa un anno fa"
 
index e555c52d8779cafdc757f0e5550f7a2c57025964..c9d1ed3352b168dfc94f81c68ce1b6126674930e 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Japanese (日本語)
+# Translation of StatusNet - Core to Japanese (日本語)
 # Expored from translatewiki.net
 #
 # Author: Brion
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:05+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:03+0000\n"
 "Language-Team: Japanese <http://translatewiki.net/wiki/Portal:ja>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ja\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1750,10 +1750,28 @@ msgstr "このグループのユーザのリスト。"
 msgid "Admin"
 msgstr "管理者"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "ユーザをグループの管理者にする"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5047,14 +5065,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5404,7 +5438,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "あなたはこのグループのメンバーではありません:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5588,6 +5622,78 @@ msgstr "グループの場所, 例えば \"都市, 都道府県 (または 地
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr "グループのエクストラニックネーム、カンマまたはスペース区切り、最大 %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "メンバー数が多いグループ"
@@ -5899,6 +6005,23 @@ msgstr "ファイルを目的ディレクトリに動かすことができませ
 msgid "Could not determine file's MIME type."
 msgstr "ファイルのMIMEタイプを決定できません。"
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "直接つぶやきを送る"
@@ -5989,6 +6112,23 @@ msgstr "合図"
 msgid "Send a nudge to this user"
 msgstr "このユーザへ合図を送る"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "サブスクリプションを追加できません"
@@ -6127,6 +6267,11 @@ msgstr "サイト検索"
 msgid "Keyword(s)"
 msgstr "キーワード"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6309,22 +6454,50 @@ msgid "about a minute ago"
 msgstr "約 1 分前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "約 1 時間前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "約 1 日前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "約 1 ヵ月前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "約 1 年前"
 
index 36eecb2760dc0a749fca2432c15a973329f51e45..a76101d6cdfda68646dc81ca375c07b33c2540a3 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Georgian (ქართული)
+# Translation of StatusNet - Core to Georgian (ქართული)
 # Expored from translatewiki.net
 #
 # Author: Zaal
@@ -7,19 +7,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:06+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:04+0000\n"
 "Language-Team: Georgian <http://translatewiki.net/wiki/Portal:ka>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ka\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1871,10 +1871,28 @@ msgstr "ამ ჯგუფის წევრების სია."
 msgid "Admin"
 msgstr "ადმინი"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "მიანიჭე მომხმარებელს ჯგუფის ადმინობა"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5463,9 +5481,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5898,7 +5927,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] ""
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6084,6 +6113,78 @@ msgstr ""
 "ჯგუფის დამატებითი მეტსახელები. გამოყავით მძიმით ან სივრცით. მაქსიმუმ %d "
 "სიმბოლო"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "ჯგუფები უმეტესი მომხმარებლებით"
@@ -6557,6 +6658,23 @@ msgstr "ფაილის გადატანა დანიშნულე
 msgid "Could not determine file's MIME type."
 msgstr "ფაილის MIME ტიპი ვერ დადგინდა."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "გააგზავნე პირდაპირი შეტყობინება"
@@ -6672,6 +6790,23 @@ msgstr ""
 msgid "Send a nudge to this user"
 msgstr ""
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "ახალი გამოწერის ჩასმა ვერ მოხერხდა."
@@ -6815,6 +6950,11 @@ msgstr "ძიება საიტზე"
 msgid "Keyword(s)"
 msgstr "საკვანძო სიტყვები"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7024,22 +7164,50 @@ msgid "about a minute ago"
 msgstr "დაახლოებით 1 წუთის წინ"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "დაახლოებით 1 საათის წინ"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "დაახლოებით 1 დღის წინ"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "დაახლოებით 1 თვის წინ"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "დაახლოებით 1 წლის წინ"
 
index 46c1fb4694bad50f631bea47cefb47a88e7f1bda..0a7d97343d4a88755732296d3954063e09128cd2 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Korean (한국어)
+# Translation of StatusNet - Core to Korean (한국어)
 # Expored from translatewiki.net
 #
 # Author: Brion
@@ -9,19 +9,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:08+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:05+0000\n"
 "Language-Team: Korean <http://translatewiki.net/wiki/Portal:ko>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ko\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1720,6 +1720,24 @@ msgstr "이 그룹의 회원리스트"
 msgid "Admin"
 msgstr "관리자"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4661,14 +4679,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form guide.
@@ -4971,7 +4995,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "당신은 해당 그룹의 멤버가 아닙니다."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5130,6 +5154,78 @@ msgstr "그룹의 위치, \"시/군/구, 도, 국가\""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "가장 많은 회원수를 가진 그룹들"
@@ -5602,6 +5698,23 @@ msgstr "찔러 보기"
 msgid "Send a nudge to this user"
 msgstr "이 사용자에게 찔러 보기 메시지 보내기"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "예약 구독을 추가 할 수 없습니다."
@@ -5724,6 +5837,11 @@ msgstr "검색 도움말"
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -5912,22 +6030,50 @@ msgid "about a minute ago"
 msgstr "1분 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "1시간 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "하루 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "1달 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "1년 전"
 
index 45afa2b711a3c6d5ce0888aa43833c0f8bc540d9..75b672334d51e2bb372bc613e85f7fa19047d345 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Macedonian (Македонски)
+# Translation of StatusNet - Core to Macedonian (Македонски)
 # Expored from translatewiki.net
 #
 # Author: Bjankuloski06
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:10+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:07+0000\n"
 "Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: mk\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1898,10 +1898,28 @@ msgstr "Список на корисниците на оваа група."
 msgid "Admin"
 msgstr "Администратор"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Блокирај"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Направи го корисникот администратор на групата"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Назначи за администратор"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Назначи го корисников за администратор"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4587,7 +4605,7 @@ msgstr "Неважечко ограничување за биографијат
 
 #: actions/useradminpanel.php:155
 msgid "Invalid welcome text. Max length is 255 characters."
-msgstr "Ð\9dÐ\95важечки текст за добредојде. Дозволени се највеќе 255 знаци."
+msgstr "Ð\9dеважечки текст за добредојде. Дозволени се највеќе 255 знаци."
 
 #: actions/useradminpanel.php:165
 #, php-format
@@ -5525,17 +5543,33 @@ msgstr ""
 #. TRANS: OAuth exception thrown when no application is found for a given consumer key.
 #: lib/apiauth.php:175
 msgid "No application for that consumer key."
-msgstr ""
+msgstr "Нема програм за тој потрошувачки клуч."
+
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr "Лош пристапен жетон."
 
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
-msgstr ""
+msgstr "Нема корисник за тој жетон."
+
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr "Не можевме да ве потврдиме."
 
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
-msgstr ""
+msgid "Tried to revoke unknown token."
+msgstr "Се обидовте да отповикате непознат жетон."
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
+msgstr "Не успеав да го избришам отповиканиот жетон."
 
 #. TRANS: Form legend.
 #: lib/applicationeditform.php:129
@@ -5968,7 +6002,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Не ни го испративте тој профил."
 msgstr[1] "Не ни го испративте тој профил."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6189,6 +6223,78 @@ msgstr ""
 "Дополнителни прекари за групата, одделени со запирка или празно место, "
 "највеќе до %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Група"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Група „%s“"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "Членови"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "Членови на групата „%s“"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Блокирани"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "Блокирани корисници од групата „%s“"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "Уредување на својства на групата „%s“"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Лого"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "Додавање или уредување на лого на групата „%s “"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "Додавање или уредување на изгледот на групата „%s“"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Групи со највеќе членови"
@@ -6681,6 +6787,25 @@ msgstr "Податотеката не може да се премести во 
 msgid "Could not determine file's MIME type."
 msgstr "Не можев да го утврдам mime-типот на податотеката."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+"„%1$s“ не е поддржан податотечен тип на овој опслужувач. Обидете се со друг %"
+"2$s-формат."
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr "„%s„ не е поддржан податотечен тип на овој опслужувач."
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Испрати директна забелешка"
@@ -6796,6 +6921,23 @@ msgstr "Подбуцни"
 msgid "Send a nudge to this user"
 msgstr "Испрати подбуцнување на корисников"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "Грешка при вметнувањето на новиот профил."
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "Грешка при вметнувањето на аватарот."
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "Грешка при вметнувањето на далечинскиот профил."
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "Дуплирана забелешка."
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Не може да се внесе нова претплата."
@@ -6939,6 +7081,11 @@ msgstr "Пребарај по мрежното место"
 msgid "Keyword(s)"
 msgstr "Клучен збор"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Пребарај"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7149,22 +7296,54 @@ msgid "about a minute ago"
 msgstr "пред една минута"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] "пред околу една минута"
+msgstr[1] "пред околу %d минути"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "пред еден час"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] "пред околу еден час"
+msgstr[1] "пред околу %d часа"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "пред еден ден"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] "пред околу еден ден"
+msgstr[1] "пред околу %d дена"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "пред еден месец"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] "пред околу еден месец"
+msgstr[1] "пред околу %d месеци"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "пред една година"
 
index e74afe48fa81feb6c4eb64d01981de4af99d8d00..466cdba68e081156544566d1cb03d85a9cbb3dd7 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
+# Translation of StatusNet - Core to Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 # Expored from translatewiki.net
 #
 # Author: Laaknor
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:11+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:10+0000\n"
 "Language-Team: Norwegian (bokmål)‬ <http://translatewiki.net/wiki/Portal:no>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: no\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1828,10 +1828,28 @@ msgstr "En liste over brukerne i denne gruppen."
 msgid "Admin"
 msgstr "Administrator"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Gjør brukeren til en administrator for gruppen"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5179,14 +5197,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5547,7 +5571,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Du er allerede logget inn!"
 msgstr[1] "Du er allerede logget inn!"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5681,6 +5705,78 @@ msgstr "Beskriv programmet ditt med %d tegn"
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupper med flest medlemmer"
@@ -6153,6 +6249,23 @@ msgstr "Filen kunne ikke flyttes til målmappen."
 msgid "Could not determine file's MIME type."
 msgstr "Kunne ikke avgjøre filens MIME-type."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Send en direktenotis"
@@ -6264,6 +6377,23 @@ msgstr "Knuff"
 msgid "Send a nudge to this user"
 msgstr "Send et knuff til denne brukeren"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr "Personlig"
@@ -6373,6 +6503,11 @@ msgstr "Søk nettsted"
 msgid "Keyword(s)"
 msgstr "Nøkkelord"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6530,22 +6665,54 @@ msgid "about a minute ago"
 msgstr "omtrent ett minutt siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "omtrent én time siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "omtrent én dag siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "omtrent én måned siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "omtrent ett år siden"
 
index d34cc5e1db7f2c5b2b3e07f3a4e831536c07de1d..ff15376dfd9e917b3e2b18939cbfc35ad26fde45 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Dutch (Nederlands)
+# Translation of StatusNet - Core to Dutch (Nederlands)
 # Expored from translatewiki.net
 #
 # Author: Brion
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:13+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:13+0000\n"
 "Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: nl\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1915,10 +1915,28 @@ msgstr "Ledenlijst van deze groep"
 msgid "Admin"
 msgstr "Beheerder"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Blokkeren"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Deze gebruiker groepsbeheerder maken"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Beheerder maken"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Deze gebruiker beheerder maken"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5574,17 +5592,33 @@ msgstr ""
 #. TRANS: OAuth exception thrown when no application is found for a given consumer key.
 #: lib/apiauth.php:175
 msgid "No application for that consumer key."
-msgstr ""
+msgstr "Er is geen applicatie voor die gebruikerssleutel."
+
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr "Ongeldig toegangstoken."
 
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
-msgstr ""
+msgstr "Er is geen gebruiker voor dat token."
+
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr "U kon niet geauthenticeerd worden."
 
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
-msgstr ""
+msgid "Tried to revoke unknown token."
+msgstr "Er is geprobeerd een onbekend token in te trekken."
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
+msgstr "Het was niet mogelijk een ingetrokken token te verwijderen."
 
 #. TRANS: Form legend.
 #: lib/applicationeditform.php:129
@@ -6021,7 +6055,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "U bent lid van deze groep:"
 msgstr[1] "U bent lid van deze groepen:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6246,6 +6280,78 @@ msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 "Extra namen voor de groep, gescheiden door komma's of spaties. Maximaal %d."
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Groep"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Groep %s"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "Leden"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "Leden van de group %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Geblokkeerd"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "Geblokkeerde gebruikers in %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "Eigenschappen van de groep %s bewerken"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Logo"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "Logo voor de groep %s toevoegen of bewerken"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "Vormgeving van de groep %s toevoegen of aanpassen"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Groepen met de meeste leden"
@@ -6742,6 +6848,25 @@ msgstr "Het bestand kon niet verplaatst worden naar de doelmap."
 msgid "Could not determine file's MIME type."
 msgstr "Het was niet mogelijk het MIME-type van het bestand te bepalen."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+"\"%1$s\" is geen ondersteund bestandstype op deze server. Probeer een andere "
+"bestandstype van de applicatie \"%2$s\" te gebruiken."
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr "\"%s\" is geen ondersteund bestandstype op deze server."
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Directe mededeling verzenden"
@@ -6857,6 +6982,23 @@ msgstr "Porren"
 msgid "Send a nudge to this user"
 msgstr "Deze gebruiker porren"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "Fout tijdens het invoegen van een nieuw profiel."
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "Fout bij het invoegen van de avatar."
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "Fout bij het invoegen van het profiel van een andere server."
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "Dubbele mededeling."
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Kon nieuw abonnement niet toevoegen."
@@ -7000,6 +7142,11 @@ msgstr "Site doorzoeken"
 msgid "Keyword(s)"
 msgstr "Term(en)"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Zoeken"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7216,22 +7363,54 @@ msgid "about a minute ago"
 msgstr "ongeveer een minuut geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] "ongeveer een minuut geleden"
+msgstr[1] "ongeveer %d minuten geleden"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "ongeveer een uur geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] "ongeveer een uur geleden"
+msgstr[1] "ongeveer %d uur geleden"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "ongeveer een dag geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] "ongeveer een dag geleden"
+msgstr[1] "ongeveer %d dagen geleden"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "ongeveer een maand geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] "ongeveer een maand geleden"
+msgstr[1] "ongeveer %d maanden geleden"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "ongeveer een jaar geleden"
 
index 743b222c728bfeae4f2fe9fb690bc9edba9432f4..2091d1431e1f19dd2c9c5889206d0a0e66373a20 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+# Translation of StatusNet - Core to Norwegian Nynorsk (‪Norsk (nynorsk)‬)
 # Expored from translatewiki.net
 #
 # Author: Nghtwlkr
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:12+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:11+0000\n"
 "Language-Team: Norwegian Nynorsk <http://translatewiki.net/wiki/Portal:nn>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: nn\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
@@ -1253,6 +1253,24 @@ msgstr "Ei liste over brukarane i denne gruppa."
 msgid "Admin"
 msgstr "Administrator"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -3832,14 +3850,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -4144,7 +4168,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Du er ikkje medlem av den gruppa."
 msgstr[1] "Du er ikkje medlem av den gruppa."
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4299,6 +4323,78 @@ msgstr "Kvar er du, t.d. «Stavanger, Rogaland, Noreg»"
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupper med flest medlemmar"
@@ -4756,6 +4852,23 @@ msgstr "Dult"
 msgid "Send a nudge to this user"
 msgstr "Send eit dult til denne brukaren"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Kan ikkje leggja til ny tinging."
@@ -4860,6 +4973,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Folk"
@@ -5022,22 +5140,54 @@ msgid "about a minute ago"
 msgstr "omtrent eitt minutt sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "omtrent ein time sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "omtrent ein dag sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "omtrent ein månad sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "omtrent eitt år sidan"
 
index 884844bc68a701d0bb1adf774957afae1e4649fc..879e8e0622b74ad04b0495f5c217a9b6c01ab956 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Polish (Polski)
+# Translation of StatusNet - Core to Polish (Polski)
 # Expored from translatewiki.net
 #
 # Author: McDutchie
@@ -9,10 +9,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:15+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:14+0000\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <http://translatewiki.net/wiki/Portal:pl>\n"
 "MIME-Version: 1.0\n"
@@ -20,11 +20,11 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
 "(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: pl\n"
-"X-Message-Group: #out-statusnet\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-Message-Group: #out-statusnet-core\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1883,10 +1883,28 @@ msgstr "Lista użytkowników znajdujących się w tej grupie."
 msgid "Admin"
 msgstr "Administrator"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Zablokuj"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Uczyń użytkownika administratorem grupy"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5501,14 +5519,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5943,7 +5977,7 @@ msgstr[0] "Jesteś członkiem tej grupy:"
 msgstr[1] "Jesteś członkiem tych grup:"
 msgstr[2] "Jesteś członkiem tych grup:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6167,6 +6201,78 @@ msgstr ""
 "Dodatkowe pseudonimy grupy, oddzielone przecinkami lub spacjami, maksymalnie "
 "%d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Grupa"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Grupa %s"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Zablokowany"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Logo"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupy z największą liczbą członków"
@@ -6658,6 +6764,23 @@ msgstr "Nie można przenieść pliku do katalogu docelowego."
 msgid "Could not determine file's MIME type."
 msgstr "Nie można określić typu MIME pliku."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Wyślij bezpośredni wpis"
@@ -6773,6 +6896,23 @@ msgstr "Szturchnij"
 msgid "Send a nudge to this user"
 msgstr "Wyślij szturchnięcie do tego użytkownika"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Nie można wprowadzić nowej subskrypcji."
@@ -6917,6 +7057,11 @@ msgstr "Przeszukaj witrynę"
 msgid "Keyword(s)"
 msgstr "Słowa kluczowe"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Wyszukaj"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7130,22 +7275,58 @@ msgid "about a minute ago"
 msgstr "około minutę temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "około godzinę temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "blisko dzień temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "około miesiąc temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "około rok temu"
 
index 51a2982b70f7b246707883bd30f27b8fa2ae6947..37a54142d3b7b6d84e5b440cce0c492c2c41ba91 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Portuguese (Português)
+# Translation of StatusNet - Core to Portuguese (Português)
 # Expored from translatewiki.net
 #
 # Author: Gallaecio
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:16+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:16+0000\n"
 "Language-Team: Portuguese <http://translatewiki.net/wiki/Portal:pt>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: pt\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1890,10 +1890,28 @@ msgstr "Uma lista dos utilizadores neste grupo."
 msgid "Admin"
 msgstr "Gestor"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Bloquear"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Tornar utilizador o gestor do grupo"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Tornar Gestor"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Tornar este utilizador um gestor"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5507,17 +5525,33 @@ msgstr "API requer acesso de leitura e escrita, mas só tem acesso de leitura."
 #. TRANS: OAuth exception thrown when no application is found for a given consumer key.
 #: lib/apiauth.php:175
 msgid "No application for that consumer key."
-msgstr ""
+msgstr "Nenhuma aplicação para essa chave de consumidor."
+
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr "Código de acesso incorrecto."
 
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
-msgstr ""
+msgstr "Nenhum utilizador para esse código."
+
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr "Não foi possível autenticá-lo."
 
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
-msgstr ""
+msgid "Tried to revoke unknown token."
+msgstr "Tentou revogar um código desconhecido."
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
+msgstr "Falha ao eliminar código revogado."
 
 #. TRANS: Form legend.
 #: lib/applicationeditform.php:129
@@ -5946,7 +5980,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Está no grupo:"
 msgstr[1] "Está nos grupos:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6167,6 +6201,78 @@ msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 "Nomes adicionais para o grupo, separados por vírgulas ou espaços, máx. %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Grupo"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Grupo %s"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "Membros"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "Membros do grupo %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Bloqueado"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "Utilizadores bloqueados de %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "Editar propriedades do grupo %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Logotipo"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "Adicionar ou editar o logotipo de %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "Adicionar ou editar o design de %s"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupos com mais membros"
@@ -6660,6 +6766,25 @@ msgstr "Não foi possível mover o ficheiro para o directório de destino."
 msgid "Could not determine file's MIME type."
 msgstr "Não foi possível determinar o tipo MIME do ficheiro."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+"\"%1$s\" não é um tipo de ficheiro suportado neste servidor. Tente usar "
+"outro formato de %2$s."
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr "\"%s\" não é um tipo de ficheiro suportado neste servidor."
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Enviar uma nota directa"
@@ -6775,6 +6900,23 @@ msgstr "Tocar"
 msgid "Send a nudge to this user"
 msgstr "Enviar toque a este utilizador"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "Erro ao inserir perfil novo."
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "Erro ao inserir avatar."
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "Erro ao inserir perfil remoto."
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "Nota duplicada."
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Não foi possível inserir nova subscrição."
@@ -6918,6 +7060,11 @@ msgstr "Pesquisar site"
 msgid "Keyword(s)"
 msgstr "Categorias"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Pesquisar"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7129,22 +7276,54 @@ msgid "about a minute ago"
 msgstr "há cerca de um minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] "um minuto"
+msgstr[1] "%d minutos"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "há cerca de uma hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] "uma hora"
+msgstr[1] "%d horas"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "há cerca de um dia"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] "um dia"
+msgstr[1] "%d dias"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "há cerca de um mês"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] "um mês"
+msgstr[1] "%d meses"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "há cerca de um ano"
 
index 56a02e2bbd2f32c7013230ff4d342fed228bfe4f..4a286a4bc51b7a6a102137ef40eeb0f29cae691b 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Brazilian Portuguese (Português do Brasil)
+# Translation of StatusNet - Core to Brazilian Portuguese (Português do Brasil)
 # Expored from translatewiki.net
 #
 # Author: Aracnus
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:17+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:17+0000\n"
 "Language-Team: Brazilian Portuguese <http://translatewiki.net/wiki/Portal:pt-"
 "br>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: pt-br\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1907,10 +1907,28 @@ msgstr "Uma lista dos usuários deste grupo."
 msgid "Admin"
 msgstr "Admin"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Bloquear"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Tornar o usuário um administrador do grupo"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Tornar administrador"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Torna este usuário um administrador"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5533,16 +5551,32 @@ msgstr ""
 #. TRANS: OAuth exception thrown when no application is found for a given consumer key.
 #: lib/apiauth.php:175
 msgid "No application for that consumer key."
-msgstr ""
+msgstr "Não foi encontrado nenhuma aplicação para essa chave de consumidor."
+
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr "Token de acesso incorreto."
 
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5978,7 +6012,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Você é membro deste grupo:"
 msgstr[1] "Você é membro destes grupos:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6201,6 +6235,78 @@ msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 "Apelidos extras para o grupo, separado por vírgulas ou espaços, no máximo %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupos com mais membros"
@@ -6697,6 +6803,23 @@ msgstr "Não foi possível mover o arquivo para o diretório de destino."
 msgid "Could not determine file's MIME type."
 msgstr "Não foi possível determinar o tipo MIME do arquivo."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Enviar uma mensagem direta"
@@ -6812,6 +6935,23 @@ msgstr "Chamar a atenção"
 msgid "Send a nudge to this user"
 msgstr "Chame a atenção deste usuário"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Não foi possível inserir a nova assinatura."
@@ -6955,6 +7095,11 @@ msgstr "Procurar no site"
 msgid "Keyword(s)"
 msgstr "Palavra(s)-chave"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7165,22 +7310,54 @@ msgid "about a minute ago"
 msgstr "cerca de 1 minuto atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "cerca de 1 hora atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "cerca de 1 dia atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "cerca de 1 mês atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "cerca de 1 ano atrás"
 
index 6bc2578872634fe8e20e5071e2d9e15f114f3d86..67326b72fb0329a1cdb147e117f9cfbad3dd3197 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Russian (Русский)
+# Translation of StatusNet - Core to Russian (Русский)
 # Expored from translatewiki.net
 #
 # Author: Brion
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:18+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:19+0000\n"
 "Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ru\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
 "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1903,10 +1903,28 @@ msgstr "Список пользователей, являющихся члена
 msgid "Admin"
 msgstr "Настройки"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Сделать пользователя администратором группы"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5519,14 +5537,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5963,7 +5997,7 @@ msgstr[0] "Вы являетесь участником следующих гр
 msgstr[1] "Вы являетесь участником следующих групп:"
 msgstr[2] "Вы являетесь участником следующих групп:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6185,6 +6219,78 @@ msgstr ""
 "Дополнительные имена для группы, разделённые запятой или пробелом, максимум %"
 "d имён"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Группы с наибольшим количеством участников"
@@ -6676,6 +6782,23 @@ msgstr "Файл не может быть перемещён в целевую 
 msgid "Could not determine file's MIME type."
 msgstr "Не удаётся определить mime-тип файла."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Послать прямую запись"
@@ -6791,6 +6914,23 @@ msgstr "«Подтолкнуть»"
 msgid "Send a nudge to this user"
 msgstr "«Подтолкнуть» этого пользователя"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Не удаётся вставить новую подписку."
@@ -6934,6 +7074,11 @@ msgstr "Поиск по сайту"
 msgid "Keyword(s)"
 msgstr "Ключевые слова"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7144,22 +7289,58 @@ msgid "about a minute ago"
 msgstr "около минуты назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "около часа назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "около дня назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "около месяца назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "около года назад"
 
index 0289924243c54db00062b9c5bb153d98df443156..c4dfe75f9b7a7dc2d8f46aaa582d511410c77d08 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -5246,12 +5246,12 @@ msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5676,7 +5676,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] ""
 msgstr[1] ""
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6814,7 +6814,7 @@ msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1109
+#: lib/util.php:1110
 #, php-format
 msgid "about one minute ago"
 msgid_plural "about %d minutes ago"
@@ -6822,12 +6822,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1115
+#: lib/util.php:1117
 #, php-format
 msgid "about one hour ago"
 msgid_plural "about %d hours ago"
@@ -6835,12 +6835,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about one day ago"
 msgid_plural "about %d days ago"
@@ -6848,12 +6848,12 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1127
+#: lib/util.php:1131
 #, php-format
 msgid "about one month ago"
 msgid_plural "about %d months ago"
@@ -6861,7 +6861,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
index f02e50ac443d8434c4bef2e10d9728597820dd50..fddbf065c29b4ae3412a6585188d339d27d5f026 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Swedish (Svenska)
+# Translation of StatusNet - Core to Swedish (Svenska)
 # Expored from translatewiki.net
 #
 # Author: Jamminjohn
@@ -9,19 +9,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:20+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:24+0000\n"
 "Language-Team: Swedish <http://translatewiki.net/wiki/Portal:sv>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: sv\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1882,10 +1882,28 @@ msgstr "En lista av användarna i denna grupp."
 msgid "Admin"
 msgstr "Administratör"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Gör användare till en administratör för gruppen"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5488,14 +5506,30 @@ msgstr ""
 msgid "No application for that consumer key."
 msgstr ""
 
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr ""
+
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5927,7 +5961,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "Du är en medlem i denna grupp:"
 msgstr[1] "Du är en medlem i dessa grupper:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6147,6 +6181,78 @@ msgstr "Plats för gruppen, om den finns, såsom \"Stad, Län, Land\""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr "Extra smeknamn för gruppen, komma- eller mellanslagsseparerade, max &d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr ""
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupper med flest medlemmar"
@@ -6638,6 +6744,23 @@ msgstr "Fil kunde inte flyttas till destinationskatalog."
 msgid "Could not determine file's MIME type."
 msgstr "Kunde inte fastställa filens MIME-typ."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr ""
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Skicka en direktnotis"
@@ -6753,6 +6876,23 @@ msgstr "Knuffa"
 msgid "Send a nudge to this user"
 msgstr "Skicka en knuff till denna användare"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Kunde inte infoga ny prenumeration."
@@ -6896,6 +7036,11 @@ msgstr "Sök webbplats"
 msgid "Keyword(s)"
 msgstr "Nyckelord"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7105,22 +7250,54 @@ msgid "about a minute ago"
 msgstr "för nån minut sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "för en timma sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "för en dag sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "för en månad sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "för ett år sedan"
 
index 5fe86483d67e90666cfa4bda62cc31ed6e4f35ee..f35ee97fa7231c7994812871163ac6d1dde83153 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Telugu (తెలుగు)
+# Translation of StatusNet - Core to Telugu (తెలుగు)
 # Expored from translatewiki.net
 #
 # Author: Brion
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:21+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:25+0000\n"
 "Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: te\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1646,10 +1646,28 @@ msgstr "ఈ గుంపులో వాడుకరులు జాబితా
 msgid "Admin"
 msgstr "నిర్వాహకులు"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "వాడుకరిని గుంపుకి ఒక నిర్వాహకునిగా చేయి"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr ""
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -4642,14 +4660,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -4992,7 +5016,7 @@ msgid_plural "You are a member of these groups:"
 msgstr[0] "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
 msgstr[1] "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5160,6 +5184,62 @@ msgstr "గుంపు యొక్క ప్రాంతం, ఉంటే, \"
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -5738,6 +5818,23 @@ msgstr "స్పందించండి"
 msgid "Notice repeated"
 msgstr "నోటీసుని పునరావృతించారు"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "కొత్త చందాని చేర్చలేకపోయాం."
@@ -5867,6 +5964,11 @@ msgstr "సైటుని వెతుకు"
 msgid "Keyword(s)"
 msgstr "కీపదము(లు)"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6063,22 +6165,54 @@ msgid "about a minute ago"
 msgstr "ఓ నిమిషం క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "ఒక గంట క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "ఓ రోజు క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "ఓ నెల క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "ఒక సంవత్సరం క్రితం"
 
index 56f93209eb15fd0456c3e8a7ee018671f5b25a80..1664f062d0b3c49086a0b0a1016751b3671a19c7 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Turkish (Türkçe)
+# Translation of StatusNet - Core to Turkish (Türkçe)
 # Expored from translatewiki.net
 #
 # Author: Joseph
@@ -8,19 +8,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:22+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:27+0000\n"
 "Language-Team: Turkish <http://translatewiki.net/wiki/Portal:tr>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: tr\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
@@ -1129,6 +1129,12 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr ""
@@ -3467,14 +3473,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -3762,7 +3774,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Bize o profili yollamadınız"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -3909,6 +3921,42 @@ msgctxt "MENU"
 msgid "Group"
 msgstr ""
 
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:120
@@ -3917,6 +3965,12 @@ msgctxt "TOOLTIP"
 msgid "Edit %s group properties"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -4328,6 +4382,23 @@ msgstr ""
 msgid "Send a nudge to this user"
 msgstr ""
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Yeni abonelik eklenemedi."
@@ -4437,6 +4508,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:81
 msgid "Find people on this site"
 msgstr ""
@@ -4582,22 +4658,50 @@ msgid "about a minute ago"
 msgstr "yaklaşık bir dakika önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "yaklaşık bir saat önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "yaklaşık bir gün önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "yaklaşık bir ay önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "yaklaşık bir yıl önce"
 
index 2a3d54b7a2cec9ac42d27585711894de4612ddbb..180a64e64f4dd77ce05dea0053d1d3f50fedaca3 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Ukrainian (Українська)
+# Translation of StatusNet - Core to Ukrainian (Українська)
 # Expored from translatewiki.net
 #
 # Author: AS
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:23+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:28+0000\n"
 "Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: uk\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
 "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1888,10 +1888,28 @@ msgstr "Список учасників цієї групи."
 msgid "Admin"
 msgstr "Адмін"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "Блок"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "Надати користувачеві права адміністратора"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "Зробити адміном"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "Надати цьому користувачеві права адміністратора"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5501,17 +5519,33 @@ msgstr ""
 #. TRANS: OAuth exception thrown when no application is found for a given consumer key.
 #: lib/apiauth.php:175
 msgid "No application for that consumer key."
-msgstr ""
+msgstr "Немає додатків для даного споживчого ключа."
+
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr "Токен погодження невірний."
 
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
-msgstr ""
+msgstr "Немає користувача для цього токену."
+
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr "Не вдалося автентифікувати Вас."
 
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
-msgstr ""
+msgid "Tried to revoke unknown token."
+msgstr "Спроба скасувати невідомий токен."
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
+msgstr "Не вдалося видалити скасований токен."
 
 #. TRANS: Form legend.
 #: lib/applicationeditform.php:129
@@ -5946,7 +5980,7 @@ msgstr[0] "Ви є учасником групи:"
 msgstr[1] "Ви є учасником таких груп:"
 msgstr[2] "Ви є учасником таких груп:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -6164,6 +6198,78 @@ msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 "Додаткові імена для групи, відокремлювати комами або пробілами, максимум %d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "Група"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "Група %s"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "Учасники"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "Учасники групи %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "Заблоковані"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "Заблоковані користувачі %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "Редагувати властивості групи %s"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Логотип"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "Додати або редагувати логотип %s"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "Додати або редагувати дизайн %s"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Групи з найбільшою кількістю учасників"
@@ -6657,6 +6763,25 @@ msgstr "Файл не може бути переміщений у директо
 msgid "Could not determine file's MIME type."
 msgstr "Не вдається визначити MIME-тип файлу."
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr ""
+"Тип файлів «%1$s» тепер не підтримується на даному сервері. Спробуйте "
+"використати інший формат %2$s."
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr "Тип файлів «%s» тепер не підтримується на даному сервері."
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "Надіслати прямий допис"
@@ -6772,6 +6897,23 @@ msgstr "«Розштовхати»"
 msgid "Send a nudge to this user"
 msgstr "Спробувати «розштовхати» цього користувача"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "Помилка при додаванні нового профілю."
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "Помилка при додаванні аватари."
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "Помилка при додаванні віддаленого профілю."
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "Дублікат допису."
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Не вдалося додати нову підписку."
@@ -6915,6 +7057,11 @@ msgstr "Пошук"
 msgid "Keyword(s)"
 msgstr "Ключові слова"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "Пошук"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -7127,22 +7274,58 @@ msgid "about a minute ago"
 msgstr "хвилину тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] "хвилину тому"
+msgstr[1] "%d хвилин тому"
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "годину тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] "годину тому"
+msgstr[1] "%d годин тому"
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "день тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] "день тому"
+msgstr[1] "%d днів тому"
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "місяць тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] "місяць тому"
+msgstr[1] "%d місяців тому"
+msgstr[2] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "рік тому"
 
index 4759a8edc4c9b24a5c3aec941bcb94bc4a52ccf3..2c99c22900bb4171b4a24f25242ce66e194597a4 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Vietnamese (Tiếng Việt)
+# Translation of StatusNet - Core to Vietnamese (Tiếng Việt)
 # Expored from translatewiki.net
 #
 # Author: Minh Nguyen
@@ -7,19 +7,19 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:24+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:30+0000\n"
 "Language-Team: Vietnamese <http://translatewiki.net/wiki/Portal:vi>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: vi\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1152,12 +1152,24 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #. TRANS: Button text for the form that will make a user administrator.
 #: actions/groupmembers.php:533
 msgctxt "BUTTON"
 msgid "Make Admin"
 msgstr ""
 
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr ""
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -3368,6 +3380,11 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
+#: lib/action.php:510
+msgctxt "MENU"
+msgid "Help"
+msgstr "Trợ giúp"
+
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:513
 msgctxt "TOOLTIP"
@@ -3511,14 +3528,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -3809,7 +3832,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Bạn chưa cập nhật thông tin riêng"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -3884,6 +3907,10 @@ msgstr ""
 msgid "Database error"
 msgstr ""
 
+#: lib/designsettings.php:105
+msgid "Upload file"
+msgstr "Tải tập tin lên"
+
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
 msgstr ""
@@ -3942,6 +3969,62 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -4335,6 +4418,23 @@ msgstr "Tìm kiếm thông báo"
 msgid "Nudge this user"
 msgstr "Bỏ chặn người dùng này"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "Không thể chèn thêm vào đăng nhận."
@@ -4426,6 +4526,11 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr ""
+
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Tên tài khoản"
@@ -4563,22 +4668,50 @@ msgid "about a minute ago"
 msgstr "1 phút trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "1 giờ trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "1 ngày trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "1 tháng trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] ""
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "1 năm trước"
 
index eec5bb093e4be66a9b98ddf1d57a9f9795d1f965..e2257f3319fbc0ea4d17bc71021ce35f54a6a789 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Simplified Chinese (‪中文(简体)‬)
+# Translation of StatusNet - Core to Simplified Chinese (‪中文(简体)‬)
 # Expored from translatewiki.net
 #
 # Author: Chenxiaoqino
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:26+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:31+0000\n"
 "Language-Team: Simplified Chinese <http://translatewiki.net/wiki/Portal:zh-"
 "hans>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: zh-hans\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
@@ -1858,10 +1858,28 @@ msgstr "该小组的成员列表。"
 msgid "Admin"
 msgstr "管理"
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr "屏蔽"
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr "使用户成为小组的管理员"
 
+#. TRANS: Button text for the form that will make a user administrator.
+#: actions/groupmembers.php:533
+msgctxt "BUTTON"
+msgid "Make Admin"
+msgstr "设置管理员"
+
+#. TRANS: Submit button title.
+#: actions/groupmembers.php:537
+msgctxt "TOOLTIP"
+msgid "Make this user an admin"
+msgstr "将这个用户设为管理员"
+
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
@@ -5352,16 +5370,32 @@ msgstr "API 资源需要读写的访问权限,但是你只有只读的权限
 #. TRANS: OAuth exception thrown when no application is found for a given consumer key.
 #: lib/apiauth.php:175
 msgid "No application for that consumer key."
-msgstr ""
+msgstr "没有应用使用这个 consumer key。"
+
+#. TRANS: OAuth exception given when an incorrect access token was given for a user.
+#: lib/apiauth.php:212
+msgid "Bad access token."
+msgstr "无效的 access token。"
 
 #. TRANS: OAuth exception given when no user was found for a given token (no token was found).
 #: lib/apiauth.php:217
 msgid "No user for that token."
-msgstr ""
+msgstr "没有用户使用这个 token。"
+
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr "无法验证你。"
 
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
+msgstr ""
+
+#. TRANS: Exception thrown when an attempt is made to remove a revoked token.
+#: lib/apioauthstore.php:182
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form legend.
@@ -5786,7 +5820,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "你是该小组成员:"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -5845,8 +5879,8 @@ msgstr ""
 "fav #<消息id> - 将该id的消息加为'收藏'\n"
 "repeat #<消息id> - 转发该id的消息\n"
 "repeat <昵称> - 转发该用户的最后一条消息\n"
-"reply #<notice_id> - 对该id消息回复\n"
-"reply <昵称> - 对该用户的最后一条小心回复\n"
+"reply #<消息id> - 对该id消息回复\n"
+"reply <昵称> - 对该用户的最后一条消息回复\n"
 "join <小组> - 加入小组\n"
 "login - 获取网页登录的地址\n"
 "drop <小组> - 离开小组\n"
@@ -6004,6 +6038,78 @@ msgstr "小组的地理位置,例如“国家、省份、城市”"
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr "该小组额外的昵称,用逗号或者空格分隔开,最长%d"
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr "小组"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr "%s小组"
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr "组员"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr "%s 小组成员"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr "屏蔽的用户"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr "%s 屏蔽的用户"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr "编辑 %s 小组设置"
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr "Logo"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:129
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s logo"
+msgstr "添加或编辑 %s logo"
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:138
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Add or edit %s design"
+msgstr "添加或编辑 %s 外观"
+
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "人气最旺的小组"
@@ -6489,6 +6595,23 @@ msgstr "文件不能被移动到目标目录。"
 msgid "Could not determine file's MIME type."
 msgstr "无法判断文件的 MIME 类型。"
 
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %1$s is the file type that was denied, %2$s is the application part of
+#. TRANS: the MIME type that was denied.
+#: lib/mediafile.php:340
+#, php-format
+msgid ""
+"\"%1$s\" is not a supported file type on this server. Try using another %2$s "
+"format."
+msgstr "此服务器不支持 “%1$s” 的文件格式,试下使用其他的 %2$s 格式。"
+
+#. TRANS: Client exception thrown trying to upload a forbidden MIME type.
+#. TRANS: %s is the file type that was denied.
+#: lib/mediafile.php:345
+#, php-format
+msgid "\"%s\" is not a supported file type on this server."
+msgstr "这个服务器不支持 %s 的文件格式。"
+
 #: lib/messageform.php:120
 msgid "Send a direct notice"
 msgstr "发送一条私信"
@@ -6602,6 +6725,23 @@ msgstr "呼叫"
 msgid "Send a nudge to this user"
 msgstr "呼叫这个用户"
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr "添加新个人信息出错。"
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr "添加头像出错。"
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr "添加远程个人信息时出错。"
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr "复制消息。"
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "无法添加新的关注。"
@@ -6745,6 +6885,11 @@ msgstr "搜索帮助"
 msgid "Keyword(s)"
 msgstr "关键词"
 
+#: lib/searchaction.php:130
+msgctxt "BUTTON"
+msgid "Search"
+msgstr "搜索"
+
 #. TRANS: Definition list item with instructions on how to get (better) search results.
 #: lib/searchaction.php:170
 msgid "Search help"
@@ -6952,22 +7097,50 @@ msgid "about a minute ago"
 msgstr "约1分钟前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1110
+#, php-format
+msgid "about one minute ago"
+msgid_plural "about %d minutes ago"
+msgstr[0] "约1分钟前"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "约1小时前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1117
+#, php-format
+msgid "about one hour ago"
+msgid_plural "about %d hours ago"
+msgstr[0] "约一小时前"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "约1天前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
 #: lib/util.php:1124
+#, php-format
+msgid "about one day ago"
+msgid_plural "about %d days ago"
+msgstr[0] "约1天前"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "约1个月前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1131
+#, php-format
+msgid "about one month ago"
+msgid_plural "about %d months ago"
+msgstr[0] "约1个月前"
+
+#. TRANS: Used in notices to indicate when the notice was made compared to now.
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "约1年前"
 
index ab5d0466ad2c861975b0cedc600c48771237cd1b..d9fcb3ff4517e76efd8996426cf80d2462713273 100644 (file)
@@ -1,4 +1,4 @@
-# Translation of StatusNet to Traditional Chinese (‪中文(繁體)‬)
+# Translation of StatusNet - Core to Traditional Chinese (‪中文(繁體)‬)
 # Expored from translatewiki.net
 #
 # --
@@ -6,20 +6,20 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: StatusNet\n"
+"Project-Id-Version: StatusNet - Core\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 19:53+0000\n"
-"PO-Revision-Date: 2010-09-14 19:54:27+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
+"PO-Revision-Date: 2010-09-18 22:08:32+0000\n"
 "Language-Team: Traditional Chinese <http://translatewiki.net/wiki/Portal:zh-"
 "hant>\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r73009); Translate extension (2010-08-20)\n"
+"X-Generator: MediaWiki 1.17alpha (r73298); Translate extension (2010-09-17)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: zh-hant\n"
-"X-Message-Group: #out-statusnet\n"
+"X-Message-Group: #out-statusnet-core\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-POT-Import-Date: 1284-49-16 34::+0000\n"
+"X-POT-Import-Date: 1284-74-75 38::+0000\n"
 
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
@@ -1254,6 +1254,12 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#. TRANS: Button text for the form that will block a user from a group.
+#: actions/groupmembers.php:399
+msgctxt "BUTTON"
+msgid "Block"
+msgstr ""
+
 #: actions/groupmembers.php:498
 msgid "Make user an admin of the group"
 msgstr ""
@@ -3816,14 +3822,20 @@ msgstr ""
 msgid "No user for that token."
 msgstr ""
 
+#. TRANS: Client error thrown when authentication fails becaus a user clicked "Cancel".
+#. TRANS: Client error thrown when authentication fails.
+#: lib/apiauth.php:258 lib/apiauth.php:290
+msgid "Could not authenticate you."
+msgstr ""
+
 #. TRANS: Exception thrown when an attempt is made to revoke an unknown token.
 #: lib/apioauthstore.php:178
-msgid "Tried to revoke unknown token"
+msgid "Tried to revoke unknown token."
 msgstr ""
 
 #. TRANS: Exception thrown when an attempt is made to remove a revoked token.
 #: lib/apioauthstore.php:182
-msgid "Failed to delete revoked token"
+msgid "Failed to delete revoked token."
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -4133,7 +4145,7 @@ msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "無法連結到伺服器:%s"
 
-#. TRANS: Help text for commands.
+#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings.
 #: lib/command.php:905
 msgid ""
 "Commands:\n"
@@ -4284,6 +4296,62 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:86
+msgctxt "MENU"
+msgid "Group"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:89
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: lib/groupnav.php:95
+msgctxt "MENU"
+msgid "Members"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:98
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s group members"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:108
+msgctxt "MENU"
+msgid "Blocked"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:111
+#, php-format
+msgctxt "TOOLTIP"
+msgid "%s blocked users"
+msgstr ""
+
+#. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
+#. TRANS: %s is the nickname of the group.
+#: lib/groupnav.php:120
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Edit %s group properties"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page. Only shown for group administrators.
+#: lib/groupnav.php:126
+msgctxt "MENU"
+msgid "Logo"
+msgstr ""
+
 #. TRANS: Tooltip for menu item in the group navigation page. Only shown for group administrators.
 #. TRANS: %s is the nickname of the group.
 #: lib/groupnav.php:129
@@ -4715,6 +4783,23 @@ msgstr ""
 msgid "Send a nudge to this user"
 msgstr ""
 
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile."
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar."
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile."
+msgstr ""
+
+#. TRANS: Exception thrown when a notice is denied because it has been sent before.
+#: lib/oauthstore.php:346
+msgid "Duplicate notice."
+msgstr ""
+
 #: lib/oauthstore.php:491
 msgid "Couldn't insert new subscription."
 msgstr "無法新增訂閱"
@@ -4980,50 +5065,50 @@ msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1109
+#: lib/util.php:1110
 #, php-format
 msgid "about one minute ago"
 msgid_plural "about %d minutes ago"
 msgstr[0] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1112
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1115
+#: lib/util.php:1117
 #, php-format
 msgid "about one hour ago"
 msgid_plural "about %d hours ago"
 msgstr[0] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1118
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about one day ago"
 msgid_plural "about %d days ago"
 msgstr[0] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1127
+#: lib/util.php:1131
 #, php-format
 msgid "about one month ago"
 msgid_plural "about %d months ago"
 msgstr[0] ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1130
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
diff --git a/plugins/APC/APCPlugin.php b/plugins/APC/APCPlugin.php
new file mode 100644 (file)
index 0000000..0069779
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Plugin to implement cache interface for APC variable cache
+ *
+ * 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/>.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * A plugin to use APC's variable cache for the cache interface
+ *
+ * New plugin interface lets us use alternative cache systems
+ * for caching. This one uses APC's variable cache.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+class APCPlugin extends Plugin
+{
+    /**
+     * Get a value associated with a key
+     *
+     * The value should have been set previously.
+     *
+     * @param string &$key   in; Lookup key
+     * @param mixed  &$value out; value associated with key
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheGet(&$key, &$value)
+    {
+        $value = apc_fetch($key);
+        Event::handle('EndCacheGet', array($key, &$value));
+        return false;
+    }
+
+    /**
+     * Associate a value with a key
+     *
+     * @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 &$expiry  in; Expiry (passed through to Memcache)
+     * @param boolean &$success out; Whether the set was successful
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
+    {
+        $success = apc_store($key, $value, ((is_null($expiry)) ? 0 : $expiry));
+
+        Event::handle('EndCacheSet', array($key, $value, $flag,
+                                           $expiry));
+        return false;
+    }
+
+    /**
+     * Delete a value associated with a key
+     *
+     * @param string  &$key     in; Key to lookup
+     * @param boolean &$success out; whether it worked
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheDelete(&$key, &$success)
+    {
+        $success = apc_delete($key);
+        Event::handle('EndCacheDelete', array($key));
+        return false;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'APC',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:APC',
+                            'rawdescription' =>
+                            _m('Use the <a href="http://pecl.php.net/package/apc">APC</a> variable cache to cache query results.'));
+        return true;
+    }
+}
diff --git a/plugins/APC/locale/APC.pot b/plugins/APC/locale/APC.pot
new file mode 100644 (file)
index 0000000..122a51f
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: APCPlugin.php:115
+msgid ""
+"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
+"to cache query results."
+msgstr ""
diff --git a/plugins/APCPlugin.php b/plugins/APCPlugin.php
deleted file mode 100644 (file)
index 666f64b..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Plugin to implement cache interface for APC variable cache
- *
- * 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/>.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * A plugin to use APC's variable cache for the cache interface
- *
- * New plugin interface lets us use alternative cache systems
- * for caching. This one uses APC's variable cache.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-class APCPlugin extends Plugin
-{
-    /**
-     * Get a value associated with a key
-     *
-     * The value should have been set previously.
-     *
-     * @param string &$key   in; Lookup key
-     * @param mixed  &$value out; value associated with key
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheGet(&$key, &$value)
-    {
-        $value = apc_fetch($key);
-        Event::handle('EndCacheGet', array($key, &$value));
-        return false;
-    }
-
-    /**
-     * Associate a value with a key
-     *
-     * @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 &$expiry  in; Expiry (passed through to Memcache)
-     * @param boolean &$success out; Whether the set was successful
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
-    {
-        $success = apc_store($key, $value, ((is_null($expiry)) ? 0 : $expiry));
-
-        Event::handle('EndCacheSet', array($key, $value, $flag,
-                                           $expiry));
-        return false;
-    }
-
-    /**
-     * Delete a value associated with a key
-     *
-     * @param string  &$key     in; Key to lookup
-     * @param boolean &$success out; whether it worked
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheDelete(&$key, &$success)
-    {
-        $success = apc_delete($key);
-        Event::handle('EndCacheDelete', array($key));
-        return false;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'APC',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:APC',
-                            'rawdescription' =>
-                            _m('Use the <a href="http://pecl.php.net/package/apc">APC</a> variable cache to cache query results.'));
-        return true;
-    }
-}
-
index c02430a58383ebd76df9902c8393802bedd16ec9..3d733e15099cdd76b4c0d7b09f5cde1c659f3f7f 100644 (file)
@@ -198,4 +198,15 @@ class AdsensePlugin extends UAPPlugin
         }
         return true;
     }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'BlankAdPlugin',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:Adsense',
+                            'rawdescription' =>
+                            _m('Plugin to add Google Adsense to StatusNet sites.'));
+        return true;
+    }
 }
index d4bed3af5f45678aba6f4613cd5964cdaaadd753..6d69f639cd7dba80c4f2a1e1423701e48862f25f 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+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"
index 870eda86f2809673b8e4ef2149c93acc59db6a01..16683e1402589421d9cea0ff73c92f48c3c46b18 100644 (file)
@@ -75,6 +75,7 @@ class AutoSandboxPlugin extends Plugin
              $contactuser = User::staticGet('nickname', $this->contact);
              if (!empty($contactuser)) {
                  $contactlink = "@<a href=\"$contactuser->uri\">$contactuser->nickname</a>";
+                 // TRANS: $contactlink is a clickable e-mailaddress.
                  $instr = _m("Note you will initially be \"sandboxed\" so your posts will not appear in the public timeline. ".
                    'Send a message to $contactlink to speed up the unsandboxing process.');
              }
index c6712c6b83a20dc98e04a8202c5cade00d7762ba..ff4f387761cd084d4152a2b64f2e6a5923965bf0 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -26,7 +26,8 @@ msgid ""
 "the public timeline."
 msgstr ""
 
-#: AutoSandboxPlugin.php:78
+#. TRANS: $contactlink is a clickable e-mailaddress.
+#: AutoSandboxPlugin.php:79
 msgid ""
 "Note you will initially be \"sandboxed\" so your posts will not appear in "
 "the public timeline. Send a message to $contactlink to speed up the "
index 5a010572f6bcec8de0f04815f965e5d7f0a2a533..a4e2d9baa4a3c16bfb03034e80e8891a07bcc576 100644 (file)
@@ -79,6 +79,7 @@ class AutocompleteAction extends Action
     function etag()
     {
         return '"' . implode(':', array($this->arg('action'),
+            common_user_cache_hash(),
             crc32($this->arg('q')), //the actual string can have funny characters in we don't want showing up in the etag
             $this->arg('limit'),
             $this->lastModified())) . '"';
index 2fd61cfde524f404c507b2ac657ae5a0e18a93f4..27f74bf09bc43ad61f1abc6f7be648ee48e64c66 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index 12012ba8866eede0fcef99dc216e5bdbe045a708..4c4455da9f55e640671eec6b38928267de52fcb3 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index 0008348389bb08edb61836452bafbbbed9c72b3c..10f89ef72392b20bc602de9f5d0abc0ad4498a33 100644 (file)
@@ -231,7 +231,7 @@ class BlacklistPlugin extends Plugin
         $url = htmlspecialchars_decode($url);
 
         if (!$this->_checkUrl($url)) {
-            $msg = sprintf(_m("You may not use UTL \"%s\" in notices."),
+            $msg = sprintf(_m("You may not use URL \"%s\" in notices."),
                            $url);
             throw new ClientException($msg);
         }
@@ -348,7 +348,6 @@ class BlacklistPlugin extends Plugin
      *
      * @return boolean hook value
      */
-
     function onAdminPanelCheck($name, &$isOK)
     {
         if ($name == 'blacklist') {
index 88db86ebd4f4bd66f458f7bedfa41f380317c161..f6bb591a8033dcedc563a48a1626b851896bc5d6 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -38,7 +38,7 @@ msgstr ""
 
 #: BlacklistPlugin.php:234
 #, php-format
-msgid "You may not use UTL \"%s\" in notices."
+msgid "You may not use URL \"%s\" in notices."
 msgstr ""
 
 #: BlacklistPlugin.php:338
index 0e2719aed032e5e271357dad838b0198d64eda51..49243aeea9dc9ff66e07e0c3340ed3b8f1671b6f 100644 (file)
@@ -51,7 +51,6 @@ if (!defined('STATUSNET')) {
  *
  * @seeAlso  Location
  */
-
 class BlankAdPlugin extends UAPPlugin
 {
     /**
@@ -61,7 +60,6 @@ class BlankAdPlugin extends UAPPlugin
      *
      * @return void
      */
-
     protected function showMediumRectangle($action)
     {
         $action->element('img',
@@ -78,7 +76,6 @@ class BlankAdPlugin extends UAPPlugin
      *
      * @return void
      */
-
     protected function showRectangle($action)
     {
         $action->element('img',
@@ -95,7 +92,6 @@ class BlankAdPlugin extends UAPPlugin
      *
      * @return void
      */
-
     protected function showWideSkyscraper($action)
     {
         $action->element('img',
@@ -112,7 +108,6 @@ class BlankAdPlugin extends UAPPlugin
      *
      * @return void
      */
-
     protected function showLeaderboard($action)
     {
         $action->element('img',
@@ -121,4 +116,15 @@ class BlankAdPlugin extends UAPPlugin
                                'src' => common_path('plugins/BlankAd/redpixel.png')),
                          '');
     }
-}
\ No newline at end of file
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'BlankAd',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:BlankAdPlugin',
+                            'rawdescription' =>
+                            _m('Plugin for testing ad layout.'));
+        return true;
+    }
+}
diff --git a/plugins/BlogspamNet/BlogspamNetPlugin.php b/plugins/BlogspamNet/BlogspamNetPlugin.php
new file mode 100644 (file)
index 0000000..51a86b4
--- /dev/null
@@ -0,0 +1,155 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to check submitted notices with blogspam.net
+ *
+ * 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  Plugin
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Brion Vibber <brion@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/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+define('BLOGSPAMNETPLUGIN_VERSION', '0.1');
+
+/**
+ * Plugin to check submitted notices with blogspam.net
+ *
+ * When new notices are saved, we check their text with blogspam.net (or
+ * a compatible service).
+ *
+ * Blogspam.net is supposed to catch blog comment spam, and I found that
+ * some of its tests (min/max size, bayesian match) gave a lot of false positives.
+ * So, I've turned those tests off by default. This may not get as many
+ * hits, but it's better than nothing.
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@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/
+ *
+ * @see      Event
+ */
+class BlogspamNetPlugin extends Plugin
+{
+    var $baseUrl = 'http://test.blogspam.net:8888/';
+
+    function __construct($url=null)
+    {
+        parent::__construct();
+        if ($url) {
+            $this->baseUrl = $url;
+        }
+    }
+
+    function onStartNoticeSave($notice)
+    {
+        $args = $this->testArgs($notice);
+        common_debug("Blogspamnet args = " . print_r($args, TRUE));
+        $requestBody = xmlrpc_encode_request('testComment', array($args));
+
+        $request = new HTTPClient($this->baseUrl, HTTPClient::METHOD_POST);
+        $request->setHeader('Content-Type', 'text/xml');
+        $request->setBody($requestBody);
+        $httpResponse = $request->send();
+
+        $response = xmlrpc_decode($httpResponse->getBody());
+        if (xmlrpc_is_fault($response)) {
+            throw new ServerException("$response[faultString] ($response[faultCode])", 500);
+        } else {
+            common_debug("Blogspamnet results = " . $response);
+            if (preg_match('/^ERROR(:(.*))?$/', $response, $match)) {
+                throw new ServerException(sprintf(_("Error from %s: %s"), $this->baseUrl, $match[2]), 500);
+            } else if (preg_match('/^SPAM(:(.*))?$/', $response, $match)) {
+                throw new ClientException(sprintf(_("Spam checker results: %s"), $match[2]), 400);
+            } else if (preg_match('/^OK$/', $response)) {
+                // don't do anything
+            } else {
+                throw new ServerException(sprintf(_("Unexpected response from %s: %s"), $this->baseUrl, $response), 500);
+            }
+        }
+        return true;
+    }
+
+    function testArgs($notice)
+    {
+        $args = array();
+        $args['comment'] = $notice->content;
+        $args['ip'] = $this->getClientIP();
+
+        if (isset($_SERVER) && array_key_exists('HTTP_USER_AGENT', $_SERVER)) {
+            $args['agent'] = $_SERVER['HTTP_USER_AGENT'];
+        }
+
+        $profile = $notice->getProfile();
+
+        if ($profile && $profile->homepage) {
+            $args['link'] = $profile->homepage;
+        }
+
+        if ($profile && $profile->fullname) {
+            $args['name'] = $profile->fullname;
+        } else {
+            $args['name'] = $profile->nickname;
+        }
+
+        $args['site'] = common_root_url();
+        $args['version'] = $this->userAgent();
+
+        $args['options'] = "max-size=" . common_config('site','textlimit') . ",min-size=0,min-words=0,exclude=bayasian";
+
+        return $args;
+    }
+
+    function getClientIP()
+    {
+        if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+            // Note: order matters here; use proxy-forwarded stuff first
+            foreach (array('HTTP_X_FORWARDED_FOR', 'CLIENT-IP', 'REMOTE_ADDR') as $k) {
+                if (isset($_SERVER[$k])) {
+                    return $_SERVER[$k];
+                }
+            }
+        }
+        return '127.0.0.1';
+    }
+
+    function userAgent()
+    {
+        return 'BlogspamNetPlugin/'.BLOGSPAMNETPLUGIN_VERSION . ' StatusNet/' . STATUSNET_VERSION;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'BlogspamNet',
+                            'version' => BLOGSPAMNETPLUGIN_VERSION,
+                            'author' => 'Evan Prodromou, Brion Vibber',
+                            'homepage' => 'http://status.net/wiki/Plugin:BlogspamNet',
+                            'rawdescription' =>
+                            _m('Plugin to check submitted notices with blogspam.net.'));
+        return true;
+    }
+}
diff --git a/plugins/BlogspamNetPlugin.php b/plugins/BlogspamNetPlugin.php
deleted file mode 100644 (file)
index d52e600..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to check submitted notices with blogspam.net
- *
- * 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  Plugin
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @author    Brion Vibber <brion@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/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-define('BLOGSPAMNETPLUGIN_VERSION', '0.1');
-
-/**
- * Plugin to check submitted notices with blogspam.net
- *
- * When new notices are saved, we check their text with blogspam.net (or
- * a compatible service).
- *
- * Blogspam.net is supposed to catch blog comment spam, and I found that
- * some of its tests (min/max size, bayesian match) gave a lot of false positives.
- * So, I've turned those tests off by default. This may not get as many
- * hits, but it's better than nothing.
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Evan Prodromou <evan@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/
- *
- * @see      Event
- */
-
-class BlogspamNetPlugin extends Plugin
-{
-    var $baseUrl = 'http://test.blogspam.net:8888/';
-
-    function __construct($url=null)
-    {
-        parent::__construct();
-        if ($url) {
-            $this->baseUrl = $url;
-        }
-    }
-
-    function onStartNoticeSave($notice)
-    {
-        $args = $this->testArgs($notice);
-        common_debug("Blogspamnet args = " . print_r($args, TRUE));
-        $requestBody = xmlrpc_encode_request('testComment', array($args));
-
-        $request = new HTTPClient($this->baseUrl, HTTPClient::METHOD_POST);
-        $request->setHeader('Content-Type', 'text/xml');
-        $request->setBody($requestBody);
-        $httpResponse = $request->send();
-
-        $response = xmlrpc_decode($httpResponse->getBody());
-        if (xmlrpc_is_fault($response)) {
-            throw new ServerException("$response[faultString] ($response[faultCode])", 500);
-        } else {
-            common_debug("Blogspamnet results = " . $response);
-            if (preg_match('/^ERROR(:(.*))?$/', $response, $match)) {
-                throw new ServerException(sprintf(_("Error from %s: %s"), $this->baseUrl, $match[2]), 500);
-            } else if (preg_match('/^SPAM(:(.*))?$/', $response, $match)) {
-                throw new ClientException(sprintf(_("Spam checker results: %s"), $match[2]), 400);
-            } else if (preg_match('/^OK$/', $response)) {
-                // don't do anything
-            } else {
-                throw new ServerException(sprintf(_("Unexpected response from %s: %s"), $this->baseUrl, $response), 500);
-            }
-        }
-        return true;
-    }
-
-    function testArgs($notice)
-    {
-        $args = array();
-        $args['comment'] = $notice->content;
-        $args['ip'] = $this->getClientIP();
-
-        if (isset($_SERVER) && array_key_exists('HTTP_USER_AGENT', $_SERVER)) {
-            $args['agent'] = $_SERVER['HTTP_USER_AGENT'];
-        }
-
-        $profile = $notice->getProfile();
-
-        if ($profile && $profile->homepage) {
-            $args['link'] = $profile->homepage;
-        }
-
-        if ($profile && $profile->fullname) {
-            $args['name'] = $profile->fullname;
-        } else {
-            $args['name'] = $profile->nickname;
-        }
-
-        $args['site'] = common_root_url();
-        $args['version'] = $this->userAgent();
-
-        $args['options'] = "max-size=" . common_config('site','textlimit') . ",min-size=0,min-words=0,exclude=bayasian";
-
-        return $args;
-    }
-
-    function getClientIP()
-    {
-        if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
-            // Note: order matters here; use proxy-forwarded stuff first
-            foreach (array('HTTP_X_FORWARDED_FOR', 'CLIENT-IP', 'REMOTE_ADDR') as $k) {
-                if (isset($_SERVER[$k])) {
-                    return $_SERVER[$k];
-                }
-            }
-        }
-        return '127.0.0.1';
-    }
-
-    function userAgent()
-    {
-        return 'BlogspamNetPlugin/'.BLOGSPAMNETPLUGIN_VERSION . ' StatusNet/' . STATUSNET_VERSION;
-    }
-}
diff --git a/plugins/CacheLog/CacheLogPlugin.php b/plugins/CacheLog/CacheLogPlugin.php
new file mode 100644 (file)
index 0000000..5b0b439
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Logs cache access
+ *
+ * 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/>.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Log cache access
+ *
+ * Note that since most caching plugins return false for StartCache*
+ * methods, you should add this plugin before them, i.e.
+ *
+ *     addPlugin('CacheLog');
+ *     addPlugin('XCache');
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+class CacheLogPlugin extends Plugin
+{
+    function onStartCacheGet(&$key, &$value)
+    {
+        $this->log(LOG_INFO, "Fetching key '$key'");
+        return true;
+    }
+
+    function onEndCacheGet($key, &$value)
+    {
+        if ($value === false) {
+            $this->log(LOG_INFO, "Cache MISS for key '$key'");
+        } else {
+            $this->log(LOG_INFO, "Cache HIT for key '$key'");
+        }
+        return true;
+    }
+
+    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
+    {
+        if (empty($value)) {
+            if (is_array($value)) {
+                $this->log(LOG_INFO, "Setting empty array for key '$key'");
+            } else if (is_null($value)) {
+                $this->log(LOG_INFO, "Setting null value for key '$key'");
+            } else if (is_string($value)) {
+                $this->log(LOG_INFO, "Setting empty string for key '$key'");
+            } else if (is_integer($value)) {
+                $this->log(LOG_INFO, "Setting integer 0 for key '$key'");
+            } else {
+                $this->log(LOG_INFO, "Setting empty value '$value' for key '$key'");
+            }
+        } else {
+            $this->log(LOG_INFO, "Setting non-empty value for key '$key'");
+        }
+        return true;
+    }
+
+    function onEndCacheSet($key, $value, $flag, $expiry)
+    {
+        $this->log(LOG_INFO, "Done setting cache value for key '$key'");
+        return true;
+    }
+
+    function onStartCacheDelete(&$key, &$success)
+    {
+        $this->log(LOG_INFO, "Deleting cache value for key '$key'");
+        return true;
+    }
+
+    function onEndCacheDelete($key)
+    {
+        $this->log(LOG_INFO, "Done deleting cache value for key '$key'");
+        return true;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'CacheLog',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:CacheLog',
+                            'description' =>
+                            _m('Log reads and writes to the cache.'));
+        return true;
+    }
+}
diff --git a/plugins/CacheLog/locale/CacheLog.pot b/plugins/CacheLog/locale/CacheLog.pot
new file mode 100644 (file)
index 0000000..fbcd6dd
--- /dev/null
@@ -0,0 +1,21 @@
+# 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: 2010-09-19 15:29+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: CacheLogPlugin.php:116
+msgid "Log reads and writes to the cache."
+msgstr ""
diff --git a/plugins/CacheLogPlugin.php b/plugins/CacheLogPlugin.php
deleted file mode 100644 (file)
index 4c47de8..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Logs cache access
- *
- * 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/>.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * Log cache access
- *
- * Note that since most caching plugins return false for StartCache*
- * methods, you should add this plugin before them, i.e.
- *
- *     addPlugin('CacheLog');
- *     addPlugin('XCache');
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-class CacheLogPlugin extends Plugin
-{
-    function onStartCacheGet(&$key, &$value)
-    {
-        $this->log(LOG_INFO, "Fetching key '$key'");
-        return true;
-    }
-
-    function onEndCacheGet($key, &$value)
-    {
-        if ($value === false) {
-            $this->log(LOG_INFO, "Cache MISS for key '$key'");
-        } else {
-            $this->log(LOG_INFO, "Cache HIT for key '$key'");
-        }
-        return true;
-    }
-
-    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
-    {
-        if (empty($value)) {
-            if (is_array($value)) {
-                $this->log(LOG_INFO, "Setting empty array for key '$key'");
-            } else if (is_null($value)) {
-                $this->log(LOG_INFO, "Setting null value for key '$key'");
-            } else if (is_string($value)) {
-                $this->log(LOG_INFO, "Setting empty string for key '$key'");
-            } else if (is_integer($value)) {
-                $this->log(LOG_INFO, "Setting integer 0 for key '$key'");
-            } else {
-                $this->log(LOG_INFO, "Setting empty value '$value' for key '$key'");
-            }
-        } else {
-            $this->log(LOG_INFO, "Setting non-empty value for key '$key'");
-        }
-        return true;
-    }
-
-    function onEndCacheSet($key, $value, $flag, $expiry)
-    {
-        $this->log(LOG_INFO, "Done setting cache value for key '$key'");
-        return true;
-    }
-
-    function onStartCacheDelete(&$key, &$success)
-    {
-        $this->log(LOG_INFO, "Deleting cache value for key '$key'");
-        return true;
-    }
-
-    function onEndCacheDelete($key)
-    {
-        $this->log(LOG_INFO, "Done deleting cache value for key '$key'");
-        return true;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'CacheLog',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:CacheLog',
-                            'description' =>
-                            _m('Log reads and writes to the cache'));
-        return true;
-    }
-}
-
index 1662db3ebafab9fc03c31b0a8e9ea65bbb7de12b..6b751a0aa4fa9e02b39d688e590e411e7851e682 100644 (file)
@@ -79,8 +79,10 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
         $action_name = $action->trimmed('action');
 
         $action->menuItem(common_local_url('caslogin'),
+                          // TRANS: Menu item. CAS is Central Authentication Service.
                           _m('CAS'),
-                          _m('Login or register with CAS'),
+                          // TRANS: Tooltip for menu item. CAS is Central Authentication Service.
+                          _m('Login or register with CAS.'),
                           $action_name === 'caslogin');
 
         return true;
@@ -93,9 +95,11 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
         switch ($name)
         {
          case 'login':
-            $instr = '(Have an account with CAS? ' .
-              'Try our [CAS login]'.
-              '(%%action.caslogin%%)!)';
+            // TRANS: Invitation to users with a CAS account to log in using the service.
+            // TRANS: "[CAS login]" is a link description. (%%action.caslogin%%) is the URL.
+            // TRANS: These two elements may not be separated.
+            $instr = _m('(Have an account with CAS? ' .
+              'Try our [CAS login](%%action.caslogin%%)!)');
             break;
          default:
             return true;
@@ -121,13 +125,13 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
     function onInitializePlugin(){
         parent::onInitializePlugin();
         if(!isset($this->server)){
-            throw new Exception("must specify a server");
+            throw new Exception(_m("Specifying a server is required.");
         }
         if(!isset($this->port)){
-            throw new Exception("must specify a port");
+            throw new Exception(_m("Specifying a port is required.");
         }
         if(!isset($this->path)){
-            throw new Exception("must specify a path");
+            throw new Exception(_m("Specifying a path is required.");
         }
         //These values need to be accessible to a action object
         //I can't think of any other way than global variables
@@ -146,8 +150,8 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
                             'version' => STATUSNET_VERSION,
                             'author' => 'Craig Andrews',
                             'homepage' => 'http://status.net/wiki/Plugin:CasAuthentication',
-                            'rawdescription' =>
-                            _m('The CAS Authentication plugin allows for StatusNet to handle authentication through CAS (Central Authentication Service).'));
+                            // TRANS: Plugin description. CAS is Central Authentication Service.
+                            'rawdescription' => _m('The CAS Authentication plugin allows for StatusNet to handle authentication through CAS (Central Authentication Service).'));
         return true;
     }
 }
index a66774dc17e911caf71d08069d648c0485020817..846774e7c671a88cd3c4fae15d88bdff1cc97c42 100644 (file)
@@ -36,13 +36,13 @@ class CasloginAction extends Action
             $casTempPassword = common_good_rand(16);
             $user = common_check_user(phpCAS::getUser(), $casTempPassword);
             if (!$user) {
-                $this->serverError(_('Incorrect username or password.'));
+                $this->serverError(_m('Incorrect username or password.'));
                 return;
             }
 
             // success!
             if (!common_set_user($user)) {
-                $this->serverError(_('Error setting user. You are probably not authorized.'));
+                $this->serverError(_m('Error setting user. You are probably not authorized.'));
                 return;
             }
 
@@ -69,7 +69,6 @@ class CasloginAction extends Action
             }
 
             common_redirect($url, 303);
-
         }
     }
 }
index b5c45eb68ebcdc23f2395d9a927736f4e4f3377f..203fd5ede4011556103fa76a7b40b20a7257badc 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,15 +16,38 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: CasAuthenticationPlugin.php:82
+#. TRANS: Menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:83
 msgid "CAS"
 msgstr ""
 
-#: CasAuthenticationPlugin.php:83
-msgid "Login or register with CAS"
+#. TRANS: Tooltip for menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:85
+msgid "Login or register with CAS."
+msgstr ""
+
+#. TRANS: Invitation to users with a CAS account to log in using the service.
+#. TRANS: "[CAS login]" is a link description. (%%action.caslogin%%) is the URL.
+#. TRANS: These two elements may not be separated.
+#: CasAuthenticationPlugin.php:101
+#, php-format
+msgid "(Have an account with CAS? Try our [CAS login](%%action.caslogin%%)!)"
+msgstr ""
+
+#: CasAuthenticationPlugin.php:128
+msgid "Specifying a server is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:131
+msgid "Specifying a port is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:134
+msgid "Specifying a path is required."
 msgstr ""
 
-#: CasAuthenticationPlugin.php:150
+#. TRANS: Plugin description. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:154
 msgid ""
 "The CAS Authentication plugin allows for StatusNet to handle authentication "
 "through CAS (Central Authentication Service)."
@@ -33,3 +56,11 @@ msgstr ""
 #: caslogin.php:28
 msgid "Already logged in."
 msgstr ""
+
+#: caslogin.php:39
+msgid "Incorrect username or password."
+msgstr ""
+
+#: caslogin.php:45
+msgid "Error setting user. You are probably not authorized."
+msgstr ""
index 57f5ad89e0f0a5392d145788baa3514ca9f9ef12..27a3a56f72d2e3cd62db96aaf3d366a03acef5b2 100644 (file)
@@ -71,9 +71,7 @@ class ClientSideShortenPlugin extends Plugin
                             'author' => 'Craig Andrews',
                             'homepage' => 'http://status.net/wiki/Plugin:ClientSideShorten',
                             'rawdescription' =>
-                            _m('ClientSideShorten causes the web interface\'s notice form to automatically shorten urls as they entered, and before the notice is submitted.'));
+                            _m('ClientSideShorten causes the web interface\'s notice form to automatically shorten URLs as they entered, and before the notice is submitted.'));
         return true;
     }
-
 }
-
index d2b4862dd0a9265c5dab98083beddaf717f5176a..8ef97c61b2131f9636d7fa67ec613d7f4aaae500 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -19,7 +19,7 @@ msgstr ""
 #: ClientSideShortenPlugin.php:74
 msgid ""
 "ClientSideShorten causes the web interface's notice form to automatically "
-"shorten urls as they entered, and before the notice is submitted."
+"shorten URLs as they entered, and before the notice is submitted."
 msgstr ""
 
 #: shorten.php:56
index f67cbf3b28a3489be488936f366e8468ef991482..53c2cf5d1a89e0dc4fef6d56b38fdef0e947e111 100644 (file)
@@ -41,7 +41,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class ShortenAction extends Action
 {
     private $text;
@@ -66,4 +65,3 @@ class ShortenAction extends Action
         print $shortened_text;
     }
 }
-
index 29cb3004bf95df1ecb8543002b273aaca258e4b7..70b324b5c20d225683d0d6cc98079941e6b7c1c7 100644 (file)
@@ -42,7 +42,6 @@ require_once INSTALLDIR.'/plugins/Realtime/RealtimePlugin.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class CometPlugin extends RealtimePlugin
 {
     public $server   = null;
@@ -104,4 +103,15 @@ class CometPlugin extends RealtimePlugin
         }
         return '/' . implode('/', $path);
     }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Comet',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:Comet',
+                            'rawdescription' =>
+                            _m('Plugin to do "real time" updates using Comet/Bayeux.'));
+        return true;
+    }
 }
index b1362b166fea669f1b6996eb969b87656ecb9cb5..ac6b43c1f312f9def96388abae7ff3c0c882b4bd 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * DirectionDetector plugin, detects notices with RTL content & sets RTL
  * style for them.
  *
  * @category     Plugin
  * @package      StatusNet
- * @author       Behrooz shabani (everplays) - <behrooz@rock.com>
+ * @author              Behrooz shabani (everplays) - <behrooz@rock.com>
  * @copyright    2009-2010 Behrooz shabani
  * @license      http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
  *
  */
 
 if (!defined('STATUSNET')) {
-               exit(1);
+    exit(1);
 }
 
-define('DIRECTIONDETECTORPLUGIN_VERSION', '0.1.2');
+define('DIRECTIONDETECTORPLUGIN_VERSION', '0.2.0');
 
 class DirectionDetectorPlugin extends Plugin {
-       /**
-        * SN plugin API, here we will make changes on rendered column
-        *
-        * @param object $notice notice is going to be saved
-        */
-       public function onStartNoticeSave(&$notice){
-               if(!preg_match('/<span class="rtl">/', $notice->rendered) && self::isRTL($notice->content))
-                       $notice->rendered = '<span class="rtl">'.$notice->rendered.'</span>';
-               return true;
-       }
+    /**
+     * SN plugin API, here we will make changes on rendered column
+     *
+     * @param object $notice notice is going to be saved
+     */
+    public function onStartNoticeSave($notice){
+        if(!preg_match('/<span class="rtl">/', $notice->rendered) && self::isRTL($notice->content))
+            $notice->rendered = '<span class="rtl">'.$notice->rendered.'</span>';
+        return true;
+    }
+
+    /**
+     * SN plugin API, here we will add css needed for modifiyed rendered
+     *
+     * @param Action $xml
+     */
+    public function onEndShowStatusNetStyles($xml){
+        $xml->element('style', array('type' => 'text/css'), 'span.rtl {display:block;direction:rtl;text-align:right;float:right;} .notice .author {float:left}');
+    }
+
+    /**
+     * is passed string a rtl content or not
+     *
+     * @param string $content
+     * @return boolean
+     */
+    public static function isRTL($content){
+        $content = self::getClearText($content);
+        $words = explode(' ', $content);
+        $rtl = 0;
+        foreach($words as $str)
+            if(self::startsWithRTLCharacter($str))
+                $rtl++;
+            else
+                $rtl--;
+        if($rtl>0)// if number of rtl words is more than ltr words so it's a rtl content
+            return true;
+        elseif($rtl==0)
+            // check first word again
+            return self::startsWithRTLCharacter($words[0]);
+        return false;
+    }
+
+    /**
+     * checks that passed string starts with a RTL language or not
+     *
+     * @param string $str
+     * @return boolean
+     */
+    public static function startsWithRTLCharacter($str){
+        if( is_array($cc = self::utf8ToUnicode(mb_substr($str, 0, 1, 'utf-8'))) )
+            $cc = $cc[0];
+        else
+            return false;
+        if($cc>=1536 && $cc<=1791) // arabic, persian, urdu, kurdish, ...
+            return true;
+        if($cc>=65136 && $cc<=65279) // arabic peresent 2
+            return true;
+        if($cc>=64336 && $cc<=65023) // arabic peresent 1
+            return true;
+        if($cc>=1424 && $cc<=1535) // hebrew
+            return true;
+        if($cc>=64256 && $cc<=64335) // hebrew peresent
+            return true;
+        if($cc>=1792 && $cc<=1871) // Syriac
+            return true;
+        if($cc>=1920 && $cc<=1983) // Thaana
+            return true;
+        if($cc>=1984 && $cc<=2047) // NKo
+            return true;
+        if($cc>=11568 && $cc<=11647) // Tifinagh
+            return true;
+        return false;
+    }
 
-       /**
-        * SN plugin API, here we will add css needed for modifiyed rendered
-        *
-        * @param
-        */
-       public function onEndShowStatusNetStyles($xml){
-               $xml->element('style', array('type' => 'text/css'), 'span.rtl {display:block;direction:rtl;text-align:right;float:right;width:490px;} .notice .author {float:left}');
-       }
-       /**
-        * checks that passed string is a RTL language or not
-        *
-        * @param string $str String to be checked
-        */
-       public static function isRTL($str){
-               self::getClearText($str);
-               if( is_array($cc = self::utf8ToUnicode(mb_substr($str, 0, 1, 'utf-8'))) )
-                       $cc = $cc[0];
-               else
-                       return false;
-               if($cc>=1536 && $cc<=1791) // Arabic, Persian, Urdu, Kurdish, ...
-                       return true;
-               if($cc>=65136 && $cc<=65279) // Arabic peresent 2
-                       return true;
-               if($cc>=64336 && $cc<=65023) // Arabic peresent 1
-                       return true;
-               if($cc>=1424 && $cc<=1535) // Hebrew
-                       return true;
-               if($cc>=64256 && $cc<=64335) // Hebrew peresent
-                       return true;
-               if($cc>=1792 && $cc<=1871) // Syriac
-                       return true;
-               if($cc>=1920 && $cc<=1983) // Thaana
-                       return true;
-               if($cc>=1984 && $cc<=2047) // NKo
-                       return true;
-               if($cc>=11568 && $cc<=11647) // Tifinagh
-                       return true;
-               return false;
-       }
+    /**
+     * clears text from replys, tags, groups, reteets & whitespaces
+     *
+     * @param string $str
+     * @return string
+     */
+    private static function getClearText($str){
+        $str = preg_replace('/@[^ ]+|![^ ]+|#[^ ]+/u', '', $str); // reply, tag, group
+        $str = preg_replace('/^RT[: ]{1}| RT | RT: |^RD[: ]{1}| RD | RD: |[♺♻:]/u', '', $str); // redent, retweet
+        $str = preg_replace("/[ \r\t\n]+/", ' ', trim($str)); // remove spaces
+        return $str;
+    }
 
-       /**
-        * clears text from replies, tags, groups, repeats & whitespaces
-        *
-        * @param string &$str string to be cleared
-        */
-       private static function getClearText(&$str){
-               $str = preg_replace('/@[^ ]+|![^ ]+|#[^ ]+/u', '', $str); // reply, tag, group
-               $str = preg_replace('/^RT[: ]{1}| RT | RT: |^RD[: ]{1}| RD | RD: |[♺♻:]/u', '', $str); // redent, retweet
-               $str = preg_replace("/[ \r\t\n]+/", ' ', trim($str)); // remove spaces
-       }
+    /**
+     * adds javascript to do same thing on input textarea
+     *
+     * @param Action $action
+     */
+    function onEndShowScripts($action){
+        if (common_logged_in()) {
+            $action->script('plugins/DirectionDetector/jquery.DirectionDetector.js');
+        }
+    }
 
-       /**
-        * Takes a UTF-8 string and returns an array of ints representing the
-        * Unicode characters. Astral planes are supported i.e. the ints in the
-        * output can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates
-        * are not allowed. ### modified ### returns first character code
-        *
-        * Returns false if the input string isn't a valid UTF-8 octet sequence.
-        */
-       private static function utf8ToUnicode($str){
-               $mState = 0;       // cached expected number of octets after the current octet
-                                  // until the beginning of the next UTF8 character sequence
-               $mUcs4  = 0;     // cached Unicode character
-               $mBytes = 1;       // cached expected number of octets in the current sequence
-               $out = array();
-               $len = strlen($str);
+    /**
+     * Takes an UTF-8 string and returns an array of ints representing the
+     * Unicode characters. Astral planes are supported ie. the ints in the
+     * output can be > 0xFFFF. O$ccurrances of the BOM are ignored. Surrogates
+     * are not allowed.
+     *
+     * @param string $str
+     * @return mixed array of ints, or false on invalid input
+     */
+    private static function utf8ToUnicode($str){
+        $mState = 0;      // cached expected number of octets after the current octet
+                   // until the beginning of the next UTF8 character sequence
+        $mUcs4 = 0;     // cached Unicode character
+        $mBytes = 1;      // cached expected number of octets in the current sequence
+        $out = array();
+        $len = strlen($str);
 
-               for($i = 0; $i < $len; $i++) {
-                       $in = ord($str{$i});
-                       if (0 == $mState) {
-                               // When mState is zero we expect either a US-ASCII character or a
-                               // multi-octet sequence.
-                               if (0 == (0x80 & ($in))) {
-                                       // US-ASCII, pass straight through.
-                                       $out[] = $in;
-                                       $mBytes = 1;
-                               } elseif (0xC0 == (0xE0 & ($in))) {
-                                       // First octet of 2 octet sequence
-                                       $mUcs4 = ($in);
-                                       $mUcs4 = ($mUcs4 & 0x1F) << 6;
-                                       $mState = 1;
-                                       $mBytes = 2;
-                               } elseif (0xE0 == (0xF0 & ($in))) {
-                                       // First octet of 3 octet sequence
-                                       $mUcs4 = ($in);
-                                       $mUcs4 = ($mUcs4 & 0x0F) << 12;
-                                       $mState = 2;
-                                       $mBytes = 3;
-                               } elseif (0xF0 == (0xF8 & ($in))) {
-                                       // First octet of 4 octet sequence
-                                       $mUcs4 = ($in);
-                                       $mUcs4 = ($mUcs4 & 0x07) << 18;
-                                       $mState = 3;
-                                       $mBytes = 4;
-                               } elseif (0xF8 == (0xFC & ($in))) {
-                                       /* First octet of 5 octet sequence.
-                                        *
-                                        * This is illegal because the encoded codepoint must be either
-                                        * (a) not the shortest form or
-                                        * (b) outside the Unicode range of 0-0x10FFFF.
-                                        * Rather than trying to resynchronize, we will carry on until the end
-                                        * of the sequence and let the later error handling code catch it.
-                                        */
-                                       $mUcs4 = ($in);
-                                       $mUcs4 = ($mUcs4 & 0x03) << 24;
-                                       $mState = 4;
-                                       $mBytes = 5;
-                               } elseif (0xFC == (0xFE & ($in))) {
-                                       // First octet of 6 octet sequence, see comments for 5 octet sequence.
-                                       $mUcs4 = ($in);
-                                       $mUcs4 = ($mUcs4 & 1) << 30;
-                                       $mState = 5;
-                                       $mBytes = 6;
-                               } else {
-                                       /* Current octet is neither in the US-ASCII range nor a legal first
-                                        * octet of a multi-octet sequence.
-                                        */
-                                       return false;
-                               }
-                       } else {
-                               // When mState is non-zero, we expect a continuation of the multi-octet
-                               // sequence
-                               if (0x80 == (0xC0 & ($in))) {
-                                       // Legal continuation.
-                                       $shift = ($mState - 1) * 6;
-                                       $tmp = $in;
-                                       $tmp = ($tmp & 0x0000003F) << $shift;
-                                       $mUcs4 |= $tmp;
-                                       if (0 == --$mState) {
-                                               /* End of the multi-octet sequence. mUcs4 now contains the final
-                                                * Unicode codepoint to be output
-                                                *
-                                                * Check for illegal sequences and codepoints.
-                                                */
-                                               // From Unicode 3.1, non-shortest form is illegal
-                                               if      (
-                                                               ((2 == $mBytes) && ($mUcs4 < 0x0080)) ||
-                                                               ((3 == $mBytes) && ($mUcs4 < 0x0800)) ||
-                                                               ((4 == $mBytes) && ($mUcs4 < 0x10000)) ||
-                                                               (4 < $mBytes) ||
-                                                               // From Unicode 3.2, surrogate characters are illegal
-                                                               (($mUcs4 & 0xFFFFF800) == 0xD800) ||
-                                                               // Codepoints outside the Unicode range are illegal
-                                                               ($mUcs4 > 0x10FFFF)
-                                                       ){
-                                                       return false;
-                                               }
-                                               if (0xFEFF != $mUcs4) {
-                                                       $out[] = $mUcs4;
-                                               }
-                                               //initialize UTF8 cache
-                                               $mState = 0;
-                                               $mUcs4  = 0;
-                                               $mBytes = 1;
-                                       }
-                               } else {
-                                       /* ((0xC0 & (*in) != 0x80) && (mState != 0))
-                                        *
-                                        * Incomplete multi-octet sequence.
-                                        */
-                                       return false;
-                               }
-                       }
-               }
-               return $out;
-       }
+        for($i = 0; $i < $len; $i++) {
+            $in = ord($str{$i});
+            if (0 == $mState) {
+                // When mState is zero we expect either a US-ASCII character or a
+                // multi-octet sequence.
+                if (0 == (0x80 & ($in))) {
+                    // US-ASCII, pass straight through.
+                    $out[] = $in;
+                    $mBytes = 1;
+                } elseif (0xC0 == (0xE0 & ($in))) {
+                    // First octet of 2 octet sequence
+                    $mUcs4 = ($in);
+                    $mUcs4 = ($mUcs4 & 0x1F) << 6;
+                    $mState = 1;
+                    $mBytes = 2;
+                } elseif (0xE0 == (0xF0 & ($in))) {
+                    // First octet of 3 octet sequence
+                    $mUcs4 = ($in);
+                    $mUcs4 = ($mUcs4 & 0x0F) << 12;
+                    $mState = 2;
+                    $mBytes = 3;
+                } elseif (0xF0 == (0xF8 & ($in))) {
+                    // First octet of 4 octet sequence
+                    $mUcs4 = ($in);
+                    $mUcs4 = ($mUcs4 & 0x07) << 18;
+                    $mState = 3;
+                    $mBytes = 4;
+                } elseif (0xF8 == (0xFC & ($in))) {
+                    /* First octet of 5 octet sequence.
+                     *
+                     * This is illegal because the encoded codepoint must be either
+                     * (a) not the shortest form or
+                     * (b) outside the Unicode range of 0-0x10FFFF.
+                     * Rather than trying to resynchronize, we will carry on until the end
+                     * of the sequence and let the later error handling code catch it.
+                     */
+                    $mUcs4 = ($in);
+                    $mUcs4 = ($mUcs4 & 0x03) << 24;
+                    $mState = 4;
+                    $mBytes = 5;
+                } elseif (0xFC == (0xFE & ($in))) {
+                    // First octet of 6 octet sequence, see comments for 5 octet sequence.
+                    $mUcs4 = ($in);
+                    $mUcs4 = ($mUcs4 & 1) << 30;
+                    $mState = 5;
+                    $mBytes = 6;
+                } else {
+                    /* Current octet is neither in the US-ASCII range nor a legal first
+                     * octet of a multi-octet sequence.
+                     */
+                    return false;
+                }
+            } else {
+                // When mState is non-zero, we expect a continuation of the multi-octet
+                // sequence
+                if (0x80 == (0xC0 & ($in))) {
+                    // Legal continuation.
+                    $shift = ($mState - 1) * 6;
+                    $tmp = $in;
+                    $tmp = ($tmp & 0x0000003F) << $shift;
+                    $mUcs4 |= $tmp;
+                    if (0 == --$mState) {
+                        /* End of the multi-octet sequence. mUcs4 now contains the final
+                         * Unicode codepoint to be output
+                         *
+                         * Check for illegal sequences and codepoints.
+                         */
+                        // From Unicode 3.1, non-shortest form is illegal
+                        if     (
+                                ((2 == $mBytes) && ($mUcs4 < 0x0080)) ||
+                                ((3 == $mBytes) && ($mUcs4 < 0x0800)) ||
+                                ((4 == $mBytes) && ($mUcs4 < 0x10000)) ||
+                                (4 < $mBytes) ||
+                                // From Unicode 3.2, surrogate characters are illegal
+                                (($mUcs4 & 0xFFFFF800) == 0xD800) ||
+                                // Codepoints outside the Unicode range are illegal
+                                ($mUcs4 > 0x10FFFF)
+                            ){
+                            return false;
+                        }
+                        if (0xFEFF != $mUcs4) {
+                            $out[] = $mUcs4;
+                        }
+                        //initialize UTF8 cache
+                        $mState = 0;
+                        $mUcs4  = 0;
+                        $mBytes = 1;
+                    }
+                } else {
+                    /* ((0xC0 & (*in) != 0x80) && (mState != 0))
+                     *
+                     * Incomplete multi-octet sequence.
+                     */
+                    return false;
+                }
+            }
+        }
+        return $out;
+    }
 
-       /**
-        * plugin details
-        */
-       function onPluginVersion(&$versions){
-               $versions[] = array(
-                       'name' => 'Direction detector',
-                       'version' => DIRECTIONDETECTORPLUGIN_VERSION,
-                       'author' => 'Behrooz Shabani',
-                        // TRANS: Direction detector plugin description.
-                       'rawdescription' => _m('Shows notices with right-to-left content in correct direction.')
-               );
-               return true;
-       }
+    /**
+     * plugin details
+     */
+    function onPluginVersion(&$versions){
+        $versions[] = array(
+            'name' => 'Direction detector',
+            'version' => DIRECTIONDETECTORPLUGIN_VERSION,
+            'author' => 'Behrooz Shabani',
+            'rawdescription' => _m('Shows notices with right-to-left content in correct direction.')
+        );
+        return true;
+    }
 }
 
 /*
diff --git a/plugins/DirectionDetector/jquery.DirectionDetector.js b/plugins/DirectionDetector/jquery.DirectionDetector.js
new file mode 100644 (file)
index 0000000..6808bca
--- /dev/null
@@ -0,0 +1,61 @@
+
+/**
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.    If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category     Plugin
+ * @package      StatusNet
+ * @author              Behrooz shabani (everplays) - <behrooz@rock.com>
+ * @copyright    2009-2010 Behrooz shabani
+ * @license      http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ *
+ */
+
+(function($){
+       $.fn.isRTL = function(str){
+               if(typeof str != typeof "" || str.length<1)
+                       return false;
+               var cc = str.charCodeAt(0);
+               if(cc>=1536 && cc<=1791) // arabic, persian, ...
+                       return true;
+               if(cc>=65136 && cc<=65279) // arabic peresent 2
+                       return true;
+               if(cc>=64336 && cc<=65023) // arabic peresent 1
+                       return true;
+               if(cc>=1424 && cc<=1535) // hebrew
+                       return true;
+               if(cc>=64256 && cc<=64335) // hebrew peresent
+                       return true;
+               if(cc>=1792 && cc<=1871) // Syriac
+                       return true;
+               if(cc>=1920 && cc<=1983) // Thaana
+                       return true;
+               if(cc>=1984 && cc<=2047) // NKo
+                       return true;
+               if(cc>=11568 && cc<=11647) // Tifinagh
+                       return true;
+               return false;
+       };
+       $(document).ready(function(){
+               var tArea = $("#notice_data-text");
+               var tCleaner = new RegExp('@[^ ]+|![^ ]+|#[^ ]+|^RT[: ]{1}| RT | RT: |^RD[: ]{1}| RD | RD: |[♺♻:]+', 'g')
+               tArea.keyup(function(){
+                       var cleaned = tArea.val().replace(tCleaner, '').replace(/^[ ]+/, '');
+                       if($().isRTL(cleaned))
+                               tArea.css('direction', 'rtl');
+                       else
+                               tArea.css('direction', 'ltr');
+               });
+       });
+})(jQuery);
index d0199a040734db69a43662dfce592249ea7547b0..995bc42eca3a62a07cae0d7c56284d8fe3121fcc 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
diff --git a/plugins/DiskCache/DiskCachePlugin.php b/plugins/DiskCache/DiskCachePlugin.php
new file mode 100644 (file)
index 0000000..47d4b15
--- /dev/null
@@ -0,0 +1,178 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Plugin to implement cache interface with disk files
+ *
+ * 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/>.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * A plugin to cache data on local disk
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+class DiskCachePlugin extends Plugin
+{
+    var $root = '/tmp';
+
+    function keyToFilename($key)
+    {
+        return $this->root . '/' . str_replace(':', '/', $key);
+    }
+
+    /**
+     * Get a value associated with a key
+     *
+     * The value should have been set previously.
+     *
+     * @param string &$key   in; Lookup key
+     * @param mixed  &$value out; value associated with key
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheGet(&$key, &$value)
+    {
+        $filename = $this->keyToFilename($key);
+
+        if (file_exists($filename)) {
+            $data = file_get_contents($filename);
+            if ($data !== false) {
+                $value = unserialize($data);
+            }
+        }
+
+        Event::handle('EndCacheGet', array($key, &$value));
+        return false;
+    }
+
+    /**
+     * Associate a value with a key
+     *
+     * @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 &$expiry  in; Expiry (passed through to Memcache)
+     * @param boolean &$success out; Whether the set was successful
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
+    {
+        $filename = $this->keyToFilename($key);
+        $parent = dirname($filename);
+
+        $sofar = '';
+
+        foreach (explode('/', $parent) as $part) {
+            if (empty($part)) {
+                continue;
+            }
+            $sofar .= '/' . $part;
+            if (!is_dir($sofar)) {
+                $this->debug("Creating new directory '$sofar'");
+                $success = mkdir($sofar, 0750);
+                if (!$success) {
+                    $this->log(LOG_ERR, "Can't create directory '$sofar'");
+                    return false;
+                }
+            }
+        }
+
+        if (is_dir($filename)) {
+            $success = false;
+            return false;
+        }
+
+        // Write to a temp file and move to destination
+
+        $tempname = tempnam(null, 'statusnetdiskcache');
+
+        $result = file_put_contents($tempname, serialize($value));
+
+        if ($result === false) {
+            $this->log(LOG_ERR, "Couldn't write '$key' to temp file '$tempname'");
+            return false;
+        }
+
+        $result = rename($tempname, $filename);
+
+        if (!$result) {
+            $this->log(LOG_ERR, "Couldn't move temp file '$tempname' to path '$filename' for key '$key'");
+            @unlink($tempname);
+            return false;
+        }
+
+        Event::handle('EndCacheSet', array($key, $value, $flag,
+                                           $expiry));
+
+        return false;
+    }
+
+    /**
+     * Delete a value associated with a key
+     *
+     * @param string  &$key     in; Key to lookup
+     * @param boolean &$success out; whether it worked
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheDelete(&$key, &$success)
+    {
+        $filename = $this->keyToFilename($key);
+
+        if (file_exists($filename) && !is_dir($filename)) {
+            unlink($filename);
+        }
+
+        Event::handle('EndCacheDelete', array($key));
+        return false;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'DiskCache',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:DiskCache',
+                            'rawdescription' =>
+                            _m('Plugin to implement cache interface with disk files.'));
+        return true;
+    }
+}
diff --git a/plugins/DiskCachePlugin.php b/plugins/DiskCachePlugin.php
deleted file mode 100644 (file)
index b709ea3..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Plugin to implement cache interface with disk files
- *
- * 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/>.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * A plugin to cache data on local disk
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-class DiskCachePlugin extends Plugin
-{
-    var $root = '/tmp';
-
-    function keyToFilename($key)
-    {
-        return $this->root . '/' . str_replace(':', '/', $key);
-    }
-
-    /**
-     * Get a value associated with a key
-     *
-     * The value should have been set previously.
-     *
-     * @param string &$key   in; Lookup key
-     * @param mixed  &$value out; value associated with key
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheGet(&$key, &$value)
-    {
-        $filename = $this->keyToFilename($key);
-
-        if (file_exists($filename)) {
-            $data = file_get_contents($filename);
-            if ($data !== false) {
-                $value = unserialize($data);
-            }
-        }
-
-        Event::handle('EndCacheGet', array($key, &$value));
-        return false;
-    }
-
-    /**
-     * Associate a value with a key
-     *
-     * @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 &$expiry  in; Expiry (passed through to Memcache)
-     * @param boolean &$success out; Whether the set was successful
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
-    {
-        $filename = $this->keyToFilename($key);
-        $parent = dirname($filename);
-
-        $sofar = '';
-
-        foreach (explode('/', $parent) as $part) {
-            if (empty($part)) {
-                continue;
-            }
-            $sofar .= '/' . $part;
-            if (!is_dir($sofar)) {
-                $this->debug("Creating new directory '$sofar'");
-                $success = mkdir($sofar, 0750);
-                if (!$success) {
-                    $this->log(LOG_ERR, "Can't create directory '$sofar'");
-                    return false;
-                }
-            }
-        }
-
-        if (is_dir($filename)) {
-            $success = false;
-            return false;
-        }
-
-        // Write to a temp file and move to destination
-
-        $tempname = tempnam(null, 'statusnetdiskcache');
-
-        $result = file_put_contents($tempname, serialize($value));
-
-        if ($result === false) {
-            $this->log(LOG_ERR, "Couldn't write '$key' to temp file '$tempname'");
-            return false;
-        }
-
-        $result = rename($tempname, $filename);
-
-        if (!$result) {
-            $this->log(LOG_ERR, "Couldn't move temp file '$tempname' to path '$filename' for key '$key'");
-            @unlink($tempname);
-            return false;
-        }
-
-        Event::handle('EndCacheSet', array($key, $value, $flag,
-                                           $expiry));
-
-        return false;
-    }
-
-    /**
-     * Delete a value associated with a key
-     *
-     * @param string  &$key     in; Key to lookup
-     * @param boolean &$success out; whether it worked
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheDelete(&$key, &$success)
-    {
-        $filename = $this->keyToFilename($key);
-
-        if (file_exists($filename) && !is_dir($filename)) {
-            unlink($filename);
-        }
-
-        Event::handle('EndCacheDelete', array($key));
-        return false;
-    }
-}
-
diff --git a/plugins/Disqus/DisqusPlugin.php b/plugins/Disqus/DisqusPlugin.php
new file mode 100644 (file)
index 0000000..681be19
--- /dev/null
@@ -0,0 +1,171 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to add Disqus commenting to notice pages
+ *
+ * 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  Plugin
+ * @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);
+}
+
+/**
+ *
+ * This plugin adds Disqus commenting to your notices. Enabling this
+ * plugin will make each notice page display the Disqus widget, and
+ * notice lists will display the number of commments each notice has.
+ *
+ * To use this plugin, you need to first register your site with Disqus
+ * and get a Discus 'shortname' for it.
+ *
+ *    http://disqus.com
+ *
+ * To enable the plugin, put the following in you config.php:
+ *
+ * addPlugin(
+ *   'Disqus', array(
+ *       'shortname' => 'YOURSHORTNAME',
+ *      'div_style' => 'width:675px; padding-top:10px; position:relative; float:left;'
+ *   )
+ * );
+ *
+ * NOTE: the 'div_style' in an optional parameter that passes in some
+ * inline CSS when creating the Disqus widget. It's a shortcut to make
+ * the widget look OK with the default StatusNet theme. If you leave
+ * it out you'll have to edit your theme CSS files to make the widget
+ * look good.  You can also control the way the widget looks by
+ * adding style rules to your theme.
+ *
+ * See: http://help.disqus.com/entries/100878-css-customization
+ *
+ * @category Plugin
+ * @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/
+ *
+ * @see      Event
+ */
+class DisqusPlugin extends Plugin
+{
+    function onEndShowContentBlock($action)
+    {
+        if (get_class($action) == 'ShownoticeAction') {
+
+            $attrs = array();
+            $attrs['id'] = 'disqus_thread';
+
+            if ($this->div_style) {
+                $attrs['style'] = $this->div_style;
+            }
+
+            $action->element('div', $attrs, null);
+
+            $script = <<<ENDOFSCRIPT
+var disqus_identifier = %d;
+  (function() {
+   var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+   dsq.src = 'http://%s.disqus.com/embed.js';
+   (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+  })();
+ENDOFSCRIPT;
+
+            $action->inlineScript(sprintf($script, $action->notice->id, $this->shortname));
+
+            $attrs = array();
+
+            $attrs['id'] = 'disqus_thread_footer';
+
+            if ($this->div_style) {
+                $attrs['style'] = $this->div_style;
+            }
+
+            $action->elementStart('div', $attrs);
+            $action->elementStart('noscript');
+
+                       // @todo FIXME: No i18n yet, because of bad implementation. Should be one string.
+            $action->raw('Please enable JavaScript to view the ');
+            $noscriptUrl = 'http://disqus.com/?ref_noscript=' . $this->shortname;
+            $action->element('a', array('href' => $noscriptUrl), 'comments powered by Disqus.');
+            $action->elementEnd('noscript');
+
+            $action->elementStart('a', array('href' => 'http://disqus.com', 'class' => 'dsq-brlink'));
+            $action->raw('blog comments powered by ');
+            $action->element('span', array('class' => 'logo-disqus'), 'Disqus');
+            $action->elementEnd('a');
+            $action->elementEnd('div');
+        }
+    }
+
+    function onEndShowScripts($action)
+    {
+        // fugly
+        $script = <<<ENDOFSCRIPT
+var disqus_shortname = '%s';
+(function () {
+  var s = document.createElement('script'); s.async = true;
+  s.src = 'http://disqus.com/forums/%s/count.js';
+  (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
+}());
+ENDOFSCRIPT;
+        $action->inlineScript(sprintf($script, $this->shortname, $this->shortname));
+
+        return true;
+    }
+
+    function onStartShowNoticeItem($noticeListItem)
+    {
+        if (empty($noticeListItem->notice->is_local)) {
+            return true;
+        }
+
+        $noticeListItem->showNotice();
+        $noticeListItem->showNoticeInfo();
+
+        $noticeUrl = $noticeListItem->notice->bestUrl();
+        $noticeUrl .= '#disqus_thread';
+
+        $noticeListItem->out->element(
+            'a', array('href' => $noticeUrl, 'class' => 'disqus_count'), 'Comments'
+        );
+
+        $noticeListItem->showNoticeOptions();
+        Event::handle('EndShowNoticeItem', array($noticeListItem));
+
+        return false;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Disqus',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Zach Copley',
+                            'homepage' => 'http://status.net/wiki/Plugin:Disqus',
+                            'rawdescription' =>
+                            _m('Use <a href="http://disqus.com/">Disqus</a>'.
+                               ' to add commenting to notice pages.'));
+        return true;
+    }
+}
diff --git a/plugins/Disqus/locale/Disqus.pot b/plugins/Disqus/locale/Disqus.pot
new file mode 100644 (file)
index 0000000..0f9ae44
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: DisqusPlugin.php:167
+msgid ""
+"Use <a href=\"http://disqus.com/\">Disqus</a> to add commenting to notice "
+"pages."
+msgstr ""
diff --git a/plugins/DisqusPlugin.php b/plugins/DisqusPlugin.php
deleted file mode 100644 (file)
index c07eaaa..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to add Disqus commenting to notice pages
- *
- * 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  Plugin
- * @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);
-}
-
-/**
- *
- * This plugin adds Disqus commenting to your notices. Enabling this
- * plugin will make each notice page display the Disqus widget, and
- * notice lists will display the number of commments each notice has.
- *
- * To use this plugin, you need to first register your site with Disqus
- * and get a Discus 'shortname' for it.
- *
- *    http://disqus.com
- *
- * To enable the plugin, put the following in you config.php:
- *
- * addPlugin(
- *   'Disqus', array(
- *       'shortname' => 'YOURSHORTNAME',
- *      'div_style' => 'width:675px; padding-top:10px; position:relative; float:left;'
- *   )
- * );
- *
- * NOTE: the 'div_style' in an optional parameter that passes in some
- * inline CSS when creating the Disqus widget. It's a shortcut to make
- * the widget look OK with the default StatusNet theme. If you leave
- * it out you'll have to edit your theme CSS files to make the widget
- * look good.  You can also control the way the widget looks by
- * adding style rules to your theme.
- *
- * See: http://help.disqus.com/entries/100878-css-customization
- *
- * @category Plugin
- * @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/
- *
- * @see      Event
- */
-
-class DisqusPlugin extends Plugin
-{
-    function onEndShowContentBlock($action)
-    {
-        if (get_class($action) == 'ShownoticeAction') {
-
-            $attrs = array();
-            $attrs['id'] = 'disqus_thread';
-
-            if ($this->div_style) {
-                $attrs['style'] = $this->div_style;
-            }
-
-            $action->element('div', $attrs, null);
-
-            $script = <<<ENDOFSCRIPT
-var disqus_identifier = %d;
-  (function() {
-   var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
-   dsq.src = 'http://%s.disqus.com/embed.js';
-   (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
-  })();
-ENDOFSCRIPT;
-
-            $action->inlineScript(sprintf($script, $action->notice->id, $this->shortname));
-
-            $attrs = array();
-
-            $attrs['id'] = 'disqus_thread_footer';
-
-            if ($this->div_style) {
-                $attrs['style'] = $this->div_style;
-            }
-
-            $action->elementStart('div', $attrs);
-            $action->elementStart('noscript');
-
-            $action->raw('Please enable JavaScript to view the ');
-            $noscriptUrl = 'http://disqus.com/?ref_noscript=' . $this->shortname;
-            $action->element('a', array('href' => $noscriptUrl), 'comments powered by Disqus.');
-            $action->elementEnd('noscript');
-
-            $action->elementStart('a', array('href' => 'http://disqus.com', 'class' => 'dsq-brlink'));
-            $action->raw('blog comments powered by ');
-            $action->element('span', array('class' => 'logo-disqus'), 'Disqus');
-            $action->elementEnd('a');
-            $action->elementEnd('div');
-        }
-    }
-
-    function onEndShowScripts($action)
-    {
-        // fugly
-        $script = <<<ENDOFSCRIPT
-var disqus_shortname = '%s';
-(function () {
-  var s = document.createElement('script'); s.async = true;
-  s.src = 'http://disqus.com/forums/%s/count.js';
-  (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
-}());
-ENDOFSCRIPT;
-        $action->inlineScript(sprintf($script, $this->shortname, $this->shortname));
-
-        return true;
-    }
-
-    function onStartShowNoticeItem($noticeListItem)
-    {
-        if (empty($noticeListItem->notice->is_local)) {
-            return true;
-        }
-
-        $noticeListItem->showNotice();
-        $noticeListItem->showNoticeInfo();
-
-        $noticeUrl = $noticeListItem->notice->bestUrl();
-        $noticeUrl .= '#disqus_thread';
-
-        $noticeListItem->out->element(
-            'a', array('href' => $noticeUrl, 'class' => 'disqus_count'), 'Comments'
-        );
-
-        $noticeListItem->showNoticeOptions();
-        Event::handle('EndShowNoticeItem', array($noticeListItem));
-
-        return false;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'Disqus',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Zach Copley',
-                            'homepage' => 'http://status.net/wiki/Plugin:Disqus',
-                            'rawdescription' =>
-                            _m('Use <a href="http://disqus.com/">Disqus</a>'.
-                               ' to add commenting to notice pages.'));
-        return true;
-    }
-}
diff --git a/plugins/Echo/EchoPlugin.php b/plugins/Echo/EchoPlugin.php
new file mode 100644 (file)
index 0000000..cd8d8c0
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to add Echo/JS-Kit commenting to notice pages
+ *
+ * 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  Plugin
+ * @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);
+}
+
+/**
+ * Plugin to use Echo (formerly JS-Kit)
+ *
+ * This plugin adds an Echo commenting widget to each notice page on
+ * your site.  To get it to work, first you'll have to sign up for Echo
+ * (a for-pay service) and register your site's URL.
+ *
+ *     http://aboutecho.com/
+ *
+ * Once you've done that it's pretty straight forward to turn the
+ * plugin on; just add this to your config.php:
+ *
+ *     addPlugin(
+ *        'Echo',
+ *        array('div_style' => 'width:675px; padding-top:10px; position:relative; float:left;')
+ *     );
+ *
+ * NOTE: the 'div_style' in an optional parameter that passes in some
+ * inline CSS when creating the Echo widget. It's a shortcut to make
+ * the widget look OK with the default StatusNet theme. If you leave
+ * it out you'll have to edit your theme CSS files to make the widget
+ * look good. You can also control the way the widget looks by
+ * adding style rules to your theme.
+ *
+ * See: http://wiki.js-kit.com/Skinning-Guide#UsingCSSnbsptocustomizefontsandcolors
+ *
+ * @category Plugin
+ * @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/
+ *
+ * @see      Event
+ */
+class EchoPlugin extends Plugin
+{
+    // NOTE: The Echo documentation says that this script will change on
+    // a per site basis, but I think that's incorrect. It always seems to
+    // be the same.
+    public $script = 'http://cdn.js-kit.com/scripts/comments.js';
+
+    function onEndShowScripts($action)
+    {
+        if (get_class($action) == 'ShownoticeAction') {
+            $action->script($this->script);
+        }
+
+        return true;
+    }
+
+    function onEndShowContentBlock($action)
+    {
+        if (get_class($action) == 'ShownoticeAction') {
+
+            $attrs = array();
+            $attrs['class'] = 'js-kit-comments';
+            $attrs['permalink'] = $action->notice->uri;
+            $attrs['uniq'] = $action->notice->id;
+
+            // NOTE: there are some other attributes that could be useful
+            // http://wiki.js-kit.com/Echo-Behavior
+
+            if (!empty($this->div_style)) {
+                $attrs['style'] = $this->div_style;
+            }
+
+            $action->element('div', $attrs, null);
+        }
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Echo',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Zach Copley',
+                            'homepage' => 'http://status.net/wiki/Plugin:Echo',
+                            'rawdescription' =>
+                            _m('Use <a href="http://aboutecho.com/">Echo</a>'.
+                               ' to add commenting to notice pages.'));
+        return true;
+    }
+}
diff --git a/plugins/Echo/locale/Echo.pot b/plugins/Echo/locale/Echo.pot
new file mode 100644 (file)
index 0000000..5f45d2a
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: EchoPlugin.php:112
+msgid ""
+"Use <a href=\"http://aboutecho.com/\">Echo</a> to add commenting to notice "
+"pages."
+msgstr ""
diff --git a/plugins/EchoPlugin.php b/plugins/EchoPlugin.php
deleted file mode 100644 (file)
index 7b51866..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to add Echo/JS-Kit commenting to notice pages
- *
- * 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  Plugin
- * @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);
-}
-
-/**
- * Plugin to use Echo (formerly JS-Kit)
- *
- * This plugin adds an Echo commenting widget to each notice page on
- * your site.  To get it to work, first you'll have to sign up for Echo
- * (a for-pay service) and register your site's URL.
- *
- *     http://aboutecho.com/
- *
- * Once you've done that it's pretty straight forward to turn the
- * plugin on; just add this to your config.php:
- *
- *     addPlugin(
- *        'Echo',
- *        array('div_style' => 'width:675px; padding-top:10px; position:relative; float:left;')
- *     );
- *
- * NOTE: the 'div_style' in an optional parameter that passes in some
- * inline CSS when creating the Echo widget. It's a shortcut to make
- * the widget look OK with the default StatusNet theme. If you leave
- * it out you'll have to edit your theme CSS files to make the widget
- * look good. You can also control the way the widget looks by
- * adding style rules to your theme.
- *
- * See: http://wiki.js-kit.com/Skinning-Guide#UsingCSSnbsptocustomizefontsandcolors
- *
- * @category Plugin
- * @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/
- *
- * @see      Event
- */
-
-class EchoPlugin extends Plugin
-{
-    // NOTE: The Echo documentation says that this script will change on
-    // a per site basis, but I think that's incorrect. It always seems to
-    // be the same.
-    public $script = 'http://cdn.js-kit.com/scripts/comments.js';
-
-    function onEndShowScripts($action)
-    {
-        if (get_class($action) == 'ShownoticeAction') {
-            $action->script($this->script);
-        }
-
-        return true;
-    }
-
-    function onEndShowContentBlock($action)
-    {
-        if (get_class($action) == 'ShownoticeAction') {
-
-            $attrs = array();
-            $attrs['class'] = 'js-kit-comments';
-            $attrs['permalink'] = $action->notice->uri;
-            $attrs['uniq'] = $action->notice->id;
-
-            // NOTE: there are some other attributes that could be useful
-            // http://wiki.js-kit.com/Echo-Behavior
-
-            if (!empty($this->div_style)) {
-                $attrs['style'] = $this->div_style;
-            }
-
-            $action->element('div', $attrs, null);
-        }
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'Echo',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Zach Copley',
-                            'homepage' => 'http://status.net/wiki/Plugin:Echo',
-                            'rawdescription' =>
-                            _m('Use <a href="http://aboutecho.com/">Echo</a>'.
-                               ' to add commenting to notice pages.'));
-        return true;
-    }
-}
index 4c018537b87f2b14f020ad45fd9ca667ad5e9a7e..689d6231d1e2a0ed3763d7bb53607fe179f530d0 100644 (file)
@@ -34,7 +34,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
 class EmailAuthenticationPlugin extends Plugin
 {
     //---interface implementation---//
-
     function onStartCheckPassword($nickname, $password, &$authenticatedUser)
     {
         if(strpos($nickname, '@'))
@@ -62,4 +61,3 @@ class EmailAuthenticationPlugin extends Plugin
         return true;
     }
 }
-
index b0d096a49a6802f0772adba802a5867816ec4aa5..469435c6b3a218084bfbb2db317fa1857ed3486e 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+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"
index 14085cc5e39d3a5aecf1ef67c6f490df4353967d..56fc396d1708fd4a72eb5ad8a8c5be5f9efa239e 100644 (file)
@@ -80,5 +80,4 @@ class EnjitQueueHandler extends QueueHandler
 
         return $response->isOk();
     }
-
 }
index 2bc790d5a04999ae3395a76f1e44705ba7f0ebaa..bf4b59bba1f6684ef259d7c9f3892bb5d1dac08e 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+/**
+ * @todo Add header and documentation
+ */
 
 if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
@@ -13,13 +16,11 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
  */
 class FBC_XDReceiverAction extends Action
 {
-
     /**
      * Do we need to write to the database?
      *
      * @return boolean true
      */
-
     function isReadonly()
     {
         return true;
@@ -32,7 +33,6 @@ class FBC_XDReceiverAction extends Action
      *
      * @return void
      */
-
     function handle($args)
     {
         // Parent handling, including cache check
@@ -63,6 +63,4 @@ class FBC_XDReceiverAction extends Action
 
         $this->elementEnd('html');
     }
-
 }
-
index 8eba7fc13569bf9266e5f62dc73942a391479f83..f06dffaaabbd789a71b6f4ee535fc48ffba0cd85 100644 (file)
@@ -60,12 +60,10 @@ class FBConnectauthAction extends Action
         parent::handle($args);
 
         if (common_is_real_login()) {
-
             // User is already logged in.  Does she already have a linked Facebook acct?
             $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE);
 
             if (!empty($flink)) {
-
                 // User already has a linked Facebook account and shouldn't be here
                 common_debug('Facebook Connect Plugin - ' .
                              'There is already a local user (' . $flink->user_id .
@@ -74,8 +72,7 @@ class FBConnectauthAction extends Action
                 // We don't want these cookies
                 getFacebook()->clear_cookie_state();
 
-                $this->clientError(_m('There is already a local user linked with this Facebook.'));
-
+                $this->clientError(_m('There is already a local user linked with this Facebook account.'));
             } else {
 
                 // User came from the Facebook connect settings tab, and
@@ -102,7 +99,7 @@ class FBConnectauthAction extends Action
             } else {
                 common_debug('Facebook Connect Plugin - ' .
                              print_r($this->args, true));
-                $this->showForm(_m('Something weird happened.'),
+                $this->showForm(_m('An unknown error has occured.'),
                                 $this->trimmed('newname'));
             }
         } else {
@@ -116,12 +113,14 @@ class FBConnectauthAction extends Action
             $this->element('div', array('class' => 'error'), $this->error);
         } else {
             $this->element('div', 'instructions',
+                           // TRANS: %s is the site name.
                            sprintf(_m('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
         }
     }
 
     function title()
     {
+        // TRANS: Page title.
         return _m('Facebook Account Setup');
     }
 
@@ -155,6 +154,7 @@ class FBConnectauthAction extends Action
                                           'class' => 'form_settings',
                                           'action' => common_local_url('FBConnectAuth')));
         $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options'));
+        // TRANS: Legend.
         $this->element('legend', null, _m('Connection options'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
@@ -164,7 +164,8 @@ class FBConnectauthAction extends Action
                                       'name' => 'license',
                                       'value' => 'true'));
         $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
-        $message = _('My text and files are available under %s ' .
+        // TRANS: %s is the name of the license used by the user for their status updates.
+        $message = _m('My text and files are available under %s ' .
                      'except this private data: password, ' .
                      'email address, IM address, and phone number.');
         $link = '<a href="' .
@@ -180,33 +181,39 @@ class FBConnectauthAction extends Action
         $this->elementStart('fieldset');
         $this->hidden('token', common_session_token());
         $this->element('legend', null,
+                       // TRANS: Legend.
                        _m('Create new account'));
         $this->element('p', null,
                        _m('Create a new user with this nickname.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
+        // TRANS: Field label.
         $this->input('newname', _m('New nickname'),
                      ($this->username) ? $this->username : '',
                      _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('create', _m('Create'));
+        // TRANS: Submit button.
+        $this->submit('create', _m('BUTTON','Create'));
         $this->elementEnd('fieldset');
 
         $this->elementStart('fieldset');
+        // TRANS: Legend.
         $this->element('legend', null,
                        _m('Connect existing account'));
         $this->element('p', null,
                        _m('If you already have an account, login with your username and password to connect it to your Facebook.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
+        // TRANS: Field label.
         $this->input('nickname', _m('Existing nickname'));
         $this->elementEnd('li');
         $this->elementStart('li');
         $this->password('password', _m('Password'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('connect', _m('Connect'));
+        // TRANS: Submit button.
+        $this->submit('connect', _m('BUTTON','Connect'));
         $this->elementEnd('fieldset');
 
         $this->elementEnd('fieldset');
@@ -222,6 +229,7 @@ class FBConnectauthAction extends Action
     function createNewUser()
     {
         if (common_config('site', 'closed')) {
+            // TRANS: Client error trying to register with registrations not allowed.
             $this->clientError(_m('Registration not allowed.'));
             return;
         }
@@ -231,6 +239,7 @@ class FBConnectauthAction extends Action
         if (common_config('site', 'inviteonly')) {
             $code = $_SESSION['invitecode'];
             if (empty($code)) {
+                // TRANS: Client error trying to register with registrations 'invite only'.
                 $this->clientError(_m('Registration not allowed.'));
                 return;
             }
@@ -238,6 +247,7 @@ class FBConnectauthAction extends Action
             $invite = Invitation::staticGet($code);
 
             if (empty($invite)) {
+                // TRANS: Client error trying to register with an invalid invitation code.
                 $this->clientError(_m('Not a valid invitation code.'));
                 return;
             }
@@ -422,8 +432,9 @@ class FBConnectauthAction extends Action
         return null;
     }
 
-     // Given a string, try to make it work as a nickname
-
+     /**
+      * Given a string, try to make it work as a nickname
+      */
      function nicknamize($str)
      {
          $str = preg_replace('/\W/', '', $str);
@@ -467,5 +478,4 @@ class FBConnectauthAction extends Action
             return null;
         }
     }
-
 }
index 20c409f3ea4a28308423fa25557959f344e38490..8345532dbd66e9d898825197e91b313faa6a2629 100644 (file)
@@ -38,6 +38,7 @@ class FBConnectLoginAction extends Action
 
     function getInstructions()
     {
+        // TRANS: Instructions.
         return _m('Login with your Facebook Account');
     }
 
@@ -52,6 +53,7 @@ class FBConnectLoginAction extends Action
 
     function title()
     {
+        // TRANS: Page title.
         return _m('Facebook Login');
     }
 
index 590dffd8a998f9c2534bb40e8c5247ff21bce375..701994d0d066a2f92f4aa398a013f0712edae04f 100644 (file)
@@ -42,7 +42,6 @@ require_once INSTALLDIR.'/lib/connectsettingsaction.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class FBConnectSettingsAction extends ConnectSettingsAction
 {
     /**
@@ -50,9 +49,9 @@ class FBConnectSettingsAction extends ConnectSettingsAction
      *
      * @return string Title of the page
      */
-
     function title()
     {
+        // TRANS: Page title.
         return _m('Facebook Connect Settings');
     }
 
@@ -61,9 +60,9 @@ class FBConnectSettingsAction extends ConnectSettingsAction
      *
      * @return instructions for use
      */
-
     function getInstructions()
     {
+       // TRANS: Instructions.
         return _m('Manage how your account connects to Facebook');
     }
 
@@ -74,7 +73,6 @@ class FBConnectSettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function showContent()
     {
         $user = common_current_user();
@@ -116,17 +114,21 @@ class FBConnectSettingsAction extends ConnectSettingsAction
 
             $this->elementStart('fieldset');
 
+            // TRANS: Legend.
             $this->element('legend', null, _m('Disconnect my account from Facebook'));
 
             if (!$user->password) {
 
                 $this->elementStart('p', array('class' => 'form_guide'));
+                // @todo FIXME: Bad i18n. Patchwork message in three parts.
+                // TRANS: Followed by a link containing text "set a password".
                 $this->text(_m('Disconnecting your Faceboook ' .
                                'would make it impossible to log in! Please '));
                 $this->element('a',
                     array('href' => common_local_url('passwordsettings')),
+                        // TRANS: Preceded by "Please " and followed by " first."
                         _m('set a password'));
-
+                // TRANS: Preceded by "Please set a password".
                 $this->text(_m(' first.'));
                 $this->elementEnd('p');
             } else {
@@ -139,7 +141,8 @@ class FBConnectSettingsAction extends ConnectSettingsAction
                 $this->element('p', 'instructions',
                     sprintf($note, $site, $site));
 
-                $this->submit('disconnect', _m('Disconnect'));
+                // TRANS: Submit button.
+                $this->submit('disconnect', _m('BUTTON','Disconnect'));
             }
 
             $this->elementEnd('fieldset');
@@ -155,7 +158,6 @@ class FBConnectSettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function handlePost()
     {
         // CSRF protection
@@ -197,7 +199,5 @@ class FBConnectSettingsAction extends ConnectSettingsAction
             $this->showForm(_m('Not sure what you\'re trying to do.'));
             return;
         }
-
     }
-
 }
index 19989a952e6e5757b1b1ab94f9d9acbf5457d8c8..798009817c9805e8e7f1ca510d91f3e4eaf5b0ae 100644 (file)
@@ -45,10 +45,8 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class FacebookPlugin extends Plugin
 {
-
     const VERSION = STATUSNET_VERSION;
 
     /**
@@ -59,7 +57,6 @@ class FacebookPlugin extends Plugin
     {
         // Allow the key and secret to be passed in
         // Control panel will override
-
         if (isset($this->apikey)) {
             $key = common_config('facebook', 'apikey');
             if (empty($key)) {
@@ -85,7 +82,6 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean result
      */
-
     static function hasKeys()
     {
         $apiKey    = common_config('facebook', 'apikey');
@@ -107,13 +103,11 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean hook return
      */
-
     function onStartInitializeRouter($m)
     {
         $m->connect('admin/facebook', array('action' => 'facebookadminpanel'));
 
         if (self::hasKeys()) {
-
             // Facebook App stuff
 
             $m->connect('facebook/app', array('action' => 'facebookhome'));
@@ -142,7 +136,6 @@ class FacebookPlugin extends Plugin
      * @return boolean hook return
      *
      */
-
     function onAutoload($cls)
     {
         switch ($cls) {
@@ -183,7 +176,6 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean hook value
      */
-
     function onEndAdminPanelNav($nav)
     {
         if (AdminPanelAction::canAdmin('facebook')) {
@@ -192,7 +184,9 @@ class FacebookPlugin extends Plugin
 
             $nav->out->menuItem(
                 common_local_url('facebookadminpanel'),
-                _m('Facebook'),
+                // TRANS: Menu item.
+                _m('MENU','Facebook'),
+                // TRANS: Tooltip for menu item "Facebook".
                 _m('Facebook integration configuration'),
                 $action_name == 'facebookadminpanel',
                 'nav_facebook_admin_panel'
@@ -210,12 +204,9 @@ class FacebookPlugin extends Plugin
      *
      * @return void
      */
-
     function onStartShowHTML($action)
     {
-
         if ($this->reqFbScripts($action)) {
-
             // XXX: Horrible hack to make Safari, FF2, and Chrome work with
             // Facebook Connect. These browser cannot use Facebook's
             // DOM parsing routines unless the mime type of the page is
@@ -238,9 +229,7 @@ class FacebookPlugin extends Plugin
                       'lang'     => $language));
 
             return false;
-
         } else {
-
             return true;
         }
     }
@@ -255,7 +244,6 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onEndShowScripts($action)
     {
         if ($this->reqFbScripts($action)) {
@@ -306,12 +294,10 @@ class FacebookPlugin extends Plugin
             $js = sprintf($js, $apikey, $login_url, $logout_url);
 
             // Compress the bugger down a bit
-
             $js = str_replace('  ', '', $js);
 
             $action->inlineScript($js);
         }
-
     }
 
     /**
@@ -323,7 +309,6 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onEndShowFooter($action)
     {
         if ($this->reqFbScripts($action)) {
@@ -340,7 +325,6 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onEndShowStatusNetStyles($action)
     {
         if ($this->reqFbScripts($action)) {
@@ -357,7 +341,6 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean true
      */
-
     function reqFbScripts($action)
     {
         if (!self::hasKeys()) {
@@ -365,7 +348,6 @@ class FacebookPlugin extends Plugin
         }
 
         // If you're logged in w/FB Connect, you always need the FB stuff
-
         $fbuid = $this->loggedIn();
 
         if (!empty($fbuid)) {
@@ -373,7 +355,6 @@ class FacebookPlugin extends Plugin
         }
 
         // List of actions that require FB stuff
-
         $needy = array('FBConnectLoginAction',
                        'FBConnectauthAction',
                        'FBConnectSettingsAction');
@@ -383,7 +364,6 @@ class FacebookPlugin extends Plugin
         }
 
         return false;
-
     }
 
     /**
@@ -391,7 +371,6 @@ class FacebookPlugin extends Plugin
      *
      * @return mixed $fbuid the Facebook ID of the logged in user, or null
      */
-
     function loggedIn()
     {
         $user = common_current_user();
@@ -403,12 +382,9 @@ class FacebookPlugin extends Plugin
             $fbuid = 0;
 
             if (!empty($flink)) {
-
                 try {
-
                     $facebook = getFacebook();
                     $fbuid    = $facebook->get_loggedin_user();
-
                 } catch (Exception $e) {
                     common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
                         'Problem getting Facebook user: ' .
@@ -432,17 +408,14 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onStartPrimaryNav($action)
     {
         if (self::hasKeys()) {
             $user = common_current_user();
             if (!empty($user)) {
-
                 $fbuid = $this->loggedIn();
 
                 if (!empty($fbuid)) {
-
                     /* Default FB silhouette pic for FB users who haven't
                        uploaded a profile pic yet. */
 
@@ -455,7 +428,7 @@ class FacebookPlugin extends Plugin
 
                     $action->element('img', array('id' => 'fbc_profile-pic',
                         'src' => (!empty($url)) ? $url : $silhouetteUrl,
-                        'alt' => 'Facebook Connect User',
+                        'alt' => _m('Facebook Connect User'),
                         'width' => '16'), '');
 
                     $iconurl =  common_path('plugins/Facebook/fbfavicon.ico');
@@ -477,18 +450,20 @@ class FacebookPlugin extends Plugin
      *
      * @return void
      */
-
     function onEndLoginGroupNav(&$action)
     {
         if (self::hasKeys()) {
-
             $action_name = $action->trimmed('action');
 
             $action->menuItem(common_local_url('FBConnectLogin'),
-                                               _m('Facebook'),
+                                               // @todo CHECKME: Should be 'Facebook Login'?
+                                               // TRANS: Menu item.
+                                               _m('MENU','Facebook'),
+                                               // TRANS: Tooltip for menu item "Facebook".
                                                _m('Login or register using Facebook'),
                                                'FBConnectLogin' === $action_name);
         }
+
         return true;
     }
 
@@ -499,18 +474,20 @@ class FacebookPlugin extends Plugin
      *
      * @return void
      */
-
     function onEndConnectSettingsNav(&$action)
     {
         if (self::hasKeys()) {
-
             $action_name = $action->trimmed('action');
 
             $action->menuItem(common_local_url('FBConnectSettings'),
-                              _m('Facebook'),
+                              // @todo CHECKME: Should be 'Facebook Connect'? 
+                              // TRANS: Menu item tab.
+                              _m('MENU','Facebook'),
+                              // TRANS: Tooltip for menu item "Facebook".
                               _m('Facebook Connect Settings'),
                               $action_name === 'FBConnectSettings');
         }
+
         return true;
     }
 
@@ -521,7 +498,6 @@ class FacebookPlugin extends Plugin
      *
      * @return void
      */
-
     function onStartLogout($action)
     {
         if (self::hasKeys()) {
@@ -550,14 +526,12 @@ class FacebookPlugin extends Plugin
      *
      * @return string $url the url for the user's Facebook avatar
      */
-
     function getProfilePicURL($fbuid)
     {
         $facebook = getFacebook();
         $url      = null;
 
         try {
-
             $fqry = 'SELECT pic_square FROM user WHERE uid = %s';
 
             $result = $facebook->api_client->fql_query(sprintf($fqry, $fbuid));
@@ -582,7 +556,6 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean hook return
      */
-
     function onStartEnqueueNotice($notice, &$transports)
     {
         if (self::hasKeys() && $notice->isLocal()) {
@@ -613,14 +586,14 @@ class FacebookPlugin extends Plugin
             'version' => self::VERSION,
             'author' => 'Zach Copley',
             'homepage' => 'http://status.net/wiki/Plugin:Facebook',
+            // TRANS: Plugin description.
             'rawdescription' => _m(
-                'The Facebook plugin allows you to integrate ' .
-                'your StatusNet instance with ' .
+                'The Facebook plugin allows integrating ' .
+                'StatusNet instances with ' .
                 '<a href="http://facebook.com/">Facebook</a> ' .
                 'and Facebook Connect.'
             )
         );
         return true;
     }
-
 }
index f65b97c865587d10b675be04b558344b8fa3a936..4c15fc03978ac6ece1ef1d05ad6807df4c4c785e 100644 (file)
@@ -36,7 +36,6 @@ require_once INSTALLDIR . '/plugins/Facebook/facebooknoticeform.php';
 
 class FacebookAction extends Action
 {
-
     var $facebook = null;
     var $fbuid    = null;
     var $flink    = null;
@@ -102,7 +101,6 @@ class FacebookAction extends Action
      *
      * @return void
      */
-
     function startHTML($type=null)
     {
         $this->showStylesheets();
@@ -143,7 +141,6 @@ class FacebookAction extends Action
 
     function showHead($error, $success)
     {
-
         if ($error) {
             $this->element("h1", null, $error);
         }
@@ -168,7 +165,10 @@ class FacebookAction extends Action
         $this->elementStart('li', array('class' =>
             ($this->action == 'facebookhome') ? 'current' : 'facebook_home'));
         $this->element('a',
-            array('href' => 'index.php', 'title' => _m('Home')), _m('Home'));
+            // TRANS: Link description for 'Home' link that leads to a start page.
+            array('href' => 'index.php', 'title' => _m('MENU','Home')),
+            // TRANS: Tooltip for 'Home' link that leads to a start page.
+            _m('Home'));
         $this->elementEnd('li');
 
         if (common_config('invite', 'enabled')) {
@@ -176,7 +176,10 @@ class FacebookAction extends Action
                 array('class' =>
                     ($this->action == 'facebookinvite') ? 'current' : 'facebook_invite'));
             $this->element('a',
-                array('href' => 'invite.php', 'title' => _m('Invite')), _m('Invite'));
+                // TRANS: Link description for 'Invite' link that leads to a page where friends can be invited.
+                array('href' => 'invite.php', 'title' => _m('MENU','Invite')),
+                // TRANS: Tooltip for 'Invite' link that leads to a page where friends can be invited.
+                _m('Invite'));
             $this->elementEnd('li');
         }
 
@@ -185,7 +188,10 @@ class FacebookAction extends Action
                 ($this->action == 'facebooksettings') ? 'current' : 'facebook_settings'));
         $this->element('a',
             array('href' => 'settings.php',
-                'title' => _m('Settings')), _m('Settings'));
+                // TRANS: Link description for 'Settings' link that leads to a page user preferences can be set.
+                'title' => _m('MENU','Settings')),
+                // TRANS: Tooltip for 'Settings' link that leads to a page user preferences can be set.
+                _m('Settings'));
         $this->elementEnd('li');
 
         $this->elementEnd('ul');
@@ -219,22 +225,22 @@ class FacebookAction extends Action
 
     function showInstructions()
     {
-
         $this->elementStart('div', array('class' => 'facebook_guide'));
 
         $this->elementStart('dl', array('class' => 'system_notice'));
         $this->element('dt', null, 'Page Notice');
 
         $loginmsg_part1 = _m('To use the %s Facebook Application you need to login ' .
-            'with your username and password. Don\'t have a username yet? ');
+            'with your username and password. Don\'t have a username yet?');
         $loginmsg_part2 = _m(' a new account.');
 
         $this->elementStart('dd');
         $this->elementStart('p');
         $this->text(sprintf($loginmsg_part1, common_config('site', 'name')));
+        // @todo FIXME: Bad i18n. Patchwork message in two parts.
         $this->element('a',
             array('href' => common_local_url('register')), _m('Register'));
-        $this->text($loginmsg_part2);
+        $this->text( " " . $loginmsg_part2);
         $this->elementEnd('p');
         $this->elementEnd('dd');
 
@@ -272,7 +278,8 @@ class FacebookAction extends Action
         $this->elementEnd('li');
         $this->elementEnd('ul');
 
-        $this->submit('submit', _m('Login'));
+        // TRANS: Login button.
+        $this->submit('submit', _m('BUTTON','Login'));
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
 
@@ -283,7 +290,6 @@ class FacebookAction extends Action
 
         $this->elementEnd('div');
         $this->elementEnd('div');
-
     }
 
     function updateProfileBox($notice)
@@ -356,7 +362,6 @@ class FacebookAction extends Action
 
     function saveNewNotice()
     {
-
         $user = $this->flink->getUser();
 
         $content = $this->trimmed('status_textarea');
@@ -368,6 +373,7 @@ class FacebookAction extends Action
             $content_shortened = common_shorten_links($content);
 
             if (Notice::contentTooLong($content_shortened)) {
+                // @todo FIXME: i18n: Needs plural.
                 $this->showPage(sprintf(_m('That\'s too long. Max notice size is %d chars.'),
                                         Notice::maxContent()));
                 return;
@@ -379,9 +385,7 @@ class FacebookAction extends Action
         $cmd = $inter->handle_command($user, $content_shortened);
 
         if ($cmd) {
-
             // XXX fix this
-
             $cmd->execute(new WebChannel());
             return;
         }
@@ -398,12 +402,10 @@ class FacebookAction extends Action
         }
 
     }
-
 }
 
 class FacebookNoticeList extends NoticeList
 {
-
     /**
      * constructor
      *
@@ -423,7 +425,6 @@ class FacebookNoticeList extends NoticeList
      *
      * @return int count of notices listed.
      */
-
     function show()
     {
         $this->out->elementStart('div', array('id' =>'notices_primary'));
@@ -459,17 +460,14 @@ class FacebookNoticeList extends NoticeList
      * @return FacebookNoticeListItem a list item for displaying the notice
      * formatted for display in the Facebook App.
      */
-
     function newListItem($notice)
     {
         return new FacebookNoticeListItem($notice, $this);
     }
-
 }
 
 class FacebookNoticeListItem extends NoticeListItem
 {
-
     /**
      * constructor
      *
@@ -477,7 +475,6 @@ class FacebookNoticeListItem extends NoticeListItem
      *
      * @param Notice $notice The notice we'll display
      */
-
     function __construct($notice, $out=null)
     {
         parent::__construct($notice, $out);
@@ -491,7 +488,6 @@ class FacebookNoticeListItem extends NoticeListItem
      *
      * @return void
      */
-
     function show()
     {
         $this->showStart();
@@ -502,12 +498,10 @@ class FacebookNoticeListItem extends NoticeListItem
 
         $this->showEnd();
     }
-
 }
 
 class FacebookProfileBoxNotice extends FacebookNoticeListItem
 {
-
     /**
      * constructor
      *
@@ -515,7 +509,6 @@ class FacebookProfileBoxNotice extends FacebookNoticeListItem
      *
      * @param Notice $notice The notice we'll display
      */
-
     function __construct($notice, $out=null)
     {
         parent::__construct($notice, $out);
@@ -527,7 +520,6 @@ class FacebookProfileBoxNotice extends FacebookNoticeListItem
      *
      * @return void
      */
-
     function show()
     {
         $this->showNotice();
@@ -537,7 +529,6 @@ class FacebookProfileBoxNotice extends FacebookNoticeListItem
 
     function showAppLink()
     {
-
         $this->facebook = getFacebook();
 
         $app_props = $this->facebook->api_client->Admin_getAppProperties(
@@ -551,5 +542,4 @@ class FacebookProfileBoxNotice extends FacebookNoticeListItem
         $this->out->text($this->app_name);
         $this->out->elementEnd('a');
     }
-
 }
index ae1c7302f970254be27bc4a5064a005c71b04791..ae26c7d3e8fa5ef6e14f460b28f4d3f25b79471f 100644 (file)
@@ -40,7 +40,6 @@ if (!defined('STATUSNET')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class FacebookadminpanelAction extends AdminPanelAction
 {
     /**
@@ -48,7 +47,6 @@ class FacebookadminpanelAction extends AdminPanelAction
      *
      * @return string page title
      */
-
     function title()
     {
         return _m('Facebook');
@@ -59,7 +57,6 @@ class FacebookadminpanelAction extends AdminPanelAction
      *
      * @return string instructions
      */
-
     function getInstructions()
     {
         return _m('Facebook integration settings');
@@ -70,7 +67,6 @@ class FacebookadminpanelAction extends AdminPanelAction
      *
      * @return void
      */
-
     function showForm()
     {
         $form = new FacebookAdminPanelForm($this);
@@ -83,7 +79,6 @@ class FacebookadminpanelAction extends AdminPanelAction
      *
      * @return void
      */
-
     function saveSettings()
     {
         static $settings = array(
@@ -100,7 +95,6 @@ class FacebookadminpanelAction extends AdminPanelAction
         }
 
         // This throws an exception on validation errors
-
         $this->validate($values);
 
         // assert(all values are valid);
@@ -145,7 +139,6 @@ class FacebookAdminPanelForm extends AdminForm
      *
      * @return int ID of the form
      */
-
     function id()
     {
         return 'facebookadminpanel';
@@ -156,7 +149,6 @@ class FacebookAdminPanelForm extends AdminForm
      *
      * @return string class of the form
      */
-
     function formClass()
     {
         return 'form_settings';
@@ -167,7 +159,6 @@ class FacebookAdminPanelForm extends AdminForm
      *
      * @return string URL of the action
      */
-
     function action()
     {
         return common_local_url('facebookadminpanel');
@@ -178,7 +169,6 @@ class FacebookAdminPanelForm extends AdminForm
      *
      * @return void
      */
-
     function formData()
     {
         $this->out->elementStart(
@@ -215,9 +205,8 @@ class FacebookAdminPanelForm extends AdminForm
      *
      * @return void
      */
-
     function formActions()
     {
-        $this->out->submit('submit', _('Save'), 'submit', null, _('Save Facebook settings'));
+        $this->out->submit('submit', _m('Save'), 'submit', null, _m('Save Facebook settings'));
     }
 }
index 60782f63c939c29f43c31ce4fca8cfa3c84f9021..6090f988c536a5181f8c42d679ff8b3fc5b076e9 100644 (file)
@@ -25,7 +25,6 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
 
 class FacebookhomeAction extends FacebookAction
 {
-
     var $page = null;
 
     function prepare($argarray)
@@ -54,7 +53,6 @@ class FacebookhomeAction extends FacebookAction
         }
 
         if ($this->flink) {
-
             $this->user = $this->flink->getUser();
 
             // If this is the first time the user has started the app
@@ -82,18 +80,14 @@ class FacebookhomeAction extends FacebookAction
             // Facebook status update permission? Then show the main page
             // of the app
             $this->showPage();
-
         } else {
-
             // User hasn't authenticated yet, prompt for creds
             $this->login();
         }
-
     }
 
     function login()
     {
-
         $this->showStylesheets();
 
         $nickname = common_canonical_nickname($this->trimmed('nickname'));
@@ -102,13 +96,11 @@ class FacebookhomeAction extends FacebookAction
         $msg = null;
 
         if ($nickname) {
-
             if (common_check_user($nickname, $password)) {
-
                 $user = User::staticGet('nickname', $nickname);
 
                 if (!$user) {
-                    $this->showLoginForm(_m("Server error - couldn't get user!"));
+                    $this->showLoginForm(_m("Server error: Couldn't get user!"));
                 }
 
                 $flink = DB_DataObject::factory('foreign_link');
@@ -126,7 +118,6 @@ class FacebookhomeAction extends FacebookAction
 
                 $this->getUpdatePermission();
                 return;
-
             } else {
                 $msg = _m('Incorrect username or password.');
             }
@@ -134,7 +125,6 @@ class FacebookhomeAction extends FacebookAction
 
         $this->showLoginForm($msg);
         $this->showFooter();
-
     }
 
     function setDefaults()
@@ -155,8 +145,15 @@ class FacebookhomeAction extends FacebookAction
     function title()
     {
         if ($this->page > 1) {
-            return sprintf(_m("%s and friends, page %d"), $this->user->nickname, $this->page);
+            // @todo FIXME: Core should have methods to get "Full name (nickname)" in a localised form
+            // so that this can be used consistenly throughout StatusNet without having to implement it
+           // over and over..
+            // TRANS: Page title.
+            // TRANS: %1$s is a user nickname, %2$s is a page number.
+            return sprintf(_m("%1$s and friends, page %2$d"), $this->user->nickname, $this->page);
         } else {
+            // TRANS: Page title.
+            // TRANS: %s is a user nickname
             return sprintf(_m("%s and friends"), $this->user->nickname);
         }
     }
@@ -175,17 +172,16 @@ class FacebookhomeAction extends FacebookAction
 
     function showNoticeList($notice)
     {
-
         $nl = new NoticeList($notice, $this);
         return $nl->show();
     }
 
     function getUpdatePermission() {
-
         $this->showStylesheets();
 
         $this->elementStart('div', array('class' => 'facebook_guide'));
 
+        // TRANS: Instructions. %s is the application name.
         $instructions = sprintf(_m('If you would like the %s app to automatically update ' .
             'your Facebook status with your latest notice, you need ' .
             'to give it permission.'), $this->app_name);
@@ -209,6 +205,7 @@ class FacebookhomeAction extends FacebookAction
             '&next_cancel=' . $next . '&submit=skip';
 
         $this->elementStart('span', array('class' => 'facebook-button'));
+        // @todo FIXME: sprintf not needed here?
         $this->element('a', array('href' => $auth_url),
             sprintf(_m('Okay, do it!'), $this->app_name));
         $this->elementEnd('span');
@@ -216,13 +213,13 @@ class FacebookhomeAction extends FacebookAction
         $this->elementEnd('li');
 
         $this->elementStart('li', array('id' => 'fb-permissions-item'));
-        $this->submit('skip', _m('Skip'));
+        // TRANS: Button text. Clicking the button will skip updating Facebook permissions.
+        $this->submit('skip', _m('BUTTON','Skip'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
 
         $this->elementEnd('form');
         $this->elementEnd('div');
-
     }
 
     /**
@@ -238,7 +235,6 @@ class FacebookhomeAction extends FacebookAction
      */
     function pagination($have_before, $have_after, $page, $action, $args=null)
     {
-
         // Does a little before-after block for next/prev page
 
         // XXX: Fix so this uses common_local_url() if possible.
@@ -254,6 +250,7 @@ class FacebookhomeAction extends FacebookAction
             $newargs = $args ? array_merge($args, $pargs) : $pargs;
             $this->elementStart('li', array('class' => 'nav_prev'));
             $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'prev'),
+                           // TRANS: Pagination link.
                            _m('After'));
             $this->elementEnd('li');
         }
@@ -262,6 +259,7 @@ class FacebookhomeAction extends FacebookAction
             $newargs = $args ? array_merge($args, $pargs) : $pargs;
             $this->elementStart('li', array('class' => 'nav_next'));
             $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'next'),
+                           // TRANS: Pagination link.
                            _m('Before'));
             $this->elementEnd('li');
         }
@@ -271,5 +269,4 @@ class FacebookhomeAction extends FacebookAction
             $this->elementEnd('dl');
         }
     }
-
 }
index e02c7bf3ed3f4ebedb00f3ab814e1c71a27e412c..a50eace12f7a13796c0289850dc2abe5dc72c5de 100644 (file)
@@ -25,7 +25,6 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
 
 class FacebookinviteAction extends FacebookAction
 {
-
     function handle($args)
     {
         parent::handle($args);
@@ -41,7 +40,6 @@ class FacebookinviteAction extends FacebookAction
      *
      * @return void
      */
-
     function showForm($error=null)
     {
         $this->error = $error;
@@ -56,7 +54,6 @@ class FacebookinviteAction extends FacebookAction
      *
      * @return void
      */
-
     function showContent()
     {
         if ($this->arg('ids')) {
@@ -68,9 +65,10 @@ class FacebookinviteAction extends FacebookAction
 
     function showSuccessContent()
     {
-
-        $this->element('h2', null, sprintf(_m('Thanks for inviting your friends to use %s'),
+        // TRANS: %s is the name of the site.
+        $this->element('h2', null, sprintf(_m('Thanks for inviting your friends to use %s.'),
             common_config('site', 'name')));
+        // TRANS: Followed by an unordered list with invited friends.
         $this->element('p', null, _m('Invitations have been sent to the following users:'));
 
         $friend_ids = $_POST['ids']; // XXX: Hmm... is this the best way to access the list?
@@ -85,8 +83,7 @@ class FacebookinviteAction extends FacebookAction
             $this->elementEnd('li');
         }
 
-        $this->elementEnd("ul");
-
+        $this->elementEnd('ul');
     }
 
     function showFormContent()
@@ -100,6 +97,7 @@ class FacebookinviteAction extends FacebookAction
                                                       'type' => common_config('site', 'name'),
                                                       'content' => $content));
         $this->hidden('invite', 'true');
+        // TRANS: %s is the name of the site.
         $actiontext = sprintf(_m('Invite your friends to use %s'), common_config('site', 'name'));
 
         $multi_params = array('showborder' => 'false');
@@ -122,6 +120,7 @@ class FacebookinviteAction extends FacebookAction
 
         if ($exclude_ids) {
 
+            // TRANS: %s is the name of the site.
             $this->element('h2', null, sprintf(_m('Friends already using %s:'),
                 common_config('site', 'name')));
             $this->elementStart('ul', array('id' => 'facebook-friends'));
@@ -140,7 +139,7 @@ class FacebookinviteAction extends FacebookAction
 
     function title()
     {
+        // TRANS: Page title.
         return sprintf(_m('Send invitations'));
     }
-
 }
index 7a173ddaebf3a2c0f62248298d9dadce4f50baa9..1961be57b6f4152cfd3dfad5b713bb2ae43faa4d 100644 (file)
@@ -25,7 +25,6 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
 
 class FacebookinviteAction extends FacebookAction
 {
-
     function handle($args)
     {
         parent::handle($args);
@@ -37,6 +36,7 @@ class FacebookinviteAction extends FacebookAction
                 $this->facebook->api_client->data_getUserPreference(
                      FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') {
 
+                // @todo FIXME: Missing i18n?
                 echo '<h1>REDIRECT TO HOME</h1>';
             }
         } else {
@@ -46,7 +46,6 @@ class FacebookinviteAction extends FacebookAction
 
     function showContent()
     {
-
         // If the user has opted not to initially allow the app to have
         // Facebook status update permission, store that preference. Only
         // promt the user the first time she uses the app
@@ -56,7 +55,6 @@ class FacebookinviteAction extends FacebookAction
         }
 
         if ($this->flink) {
-
             $this->user = $this->flink->getUser();
 
             // If this is the first time the user has started the app
@@ -69,7 +67,6 @@ class FacebookinviteAction extends FacebookAction
                      return;
                  }
              }
-
         } else {
             $this->showLoginForm();
         }
@@ -88,6 +85,8 @@ class FacebookinviteAction extends FacebookAction
 
     function title()
     {
+        // @todo FIXME: Give a more precise description? Suggestion: "Login with Facebook Connect"
+        // TRANS: Page title.
         return sprintf(_m('Login'));
     }
 
@@ -95,5 +94,4 @@ class FacebookinviteAction extends FacebookAction
     {
 
     }
-
 }
index 5989147f49d457cd184f442be17f426cb3d121e1..d52222c933bdb7d273428de7fdd9a83675b4e288 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * StatusNet, the distributed open-source microblogging tool
  *
- * Form for posting a notice from within the Facebook App. 
+ * Form for posting a notice from within the Facebook App.
  *
  * This is a stripped down version of the normal NoticeForm (sans
  * location stuff and media upload stuff). I'm not sure we can share the
@@ -53,31 +53,26 @@ require_once INSTALLDIR . '/lib/form.php';
  *
  * @see      HTMLOutputter
  */
-
 class FacebookNoticeForm extends Form
 {
     /**
      * Current action, used for returning to this page.
      */
-
     var $action = null;
 
     /**
      * Pre-filled content of the form
      */
-
     var $content = null;
 
     /**
      * The current user
      */
-
     var $user = null;
 
     /**
      * The notice being replied to
      */
-
     var $inreplyto = null;
 
     /**
@@ -87,7 +82,6 @@ class FacebookNoticeForm extends Form
      * @param string        $action  action to return to, if any
      * @param string        $content content to pre-fill
      */
-
     function __construct($out=null, $action=null, $content=null, $post_action=null, $user=null, $inreplyto=null)
     {
         parent::__construct($out);
@@ -102,7 +96,7 @@ class FacebookNoticeForm extends Form
         } else {
             $this->user = common_current_user();
         }
-        
+
         // Note: Facebook doesn't allow multipart/form-data posting to
         // canvas pages, so don't try to set it--no file uploads, at
         // least not this way.  It can be done using multiple servers
@@ -114,7 +108,6 @@ class FacebookNoticeForm extends Form
      *
      * @return string ID of the form
      */
-
     function id()
     {
         return 'form_notice';
@@ -125,7 +118,6 @@ class FacebookNoticeForm extends Form
      *
      * @return string class of the form
      */
-
     function formClass()
     {
         return 'form_notice';
@@ -136,7 +128,6 @@ class FacebookNoticeForm extends Form
      *
      * @return string URL of the action
      */
-
     function action()
     {
         return $this->post_action;
@@ -149,7 +140,8 @@ class FacebookNoticeForm extends Form
      */
     function formLegend()
     {
-        $this->out->element('legend', null, _('Send a notice'));
+        // TRANS: Legend.
+        $this->out->element('legend', null, _m('Send a notice'));
     }
 
     /**
@@ -157,12 +149,12 @@ class FacebookNoticeForm extends Form
      *
      * @return void
      */
-
     function formData()
     {
         if (Event::handle('StartShowNoticeFormData', array($this))) {
             $this->out->element('label', array('for' => 'notice_data-text'),
-                                sprintf(_('What\'s up, %s?'), $this->user->nickname));
+                                // TRANS: Field label.
+                                sprintf(_m('What\'s up, %s?'), $this->user->nickname));
             // XXX: vary by defined max size
             $this->out->element('textarea', array('id' => 'notice_data-text',
                                                   'cols' => 35,
@@ -174,7 +166,7 @@ class FacebookNoticeForm extends Form
 
             if ($contentLimit > 0) {
                 $this->out->elementStart('dl', 'form_note');
-                $this->out->element('dt', null, _('Available characters'));
+                $this->out->element('dt', null, _m('Available characters'));
                 $this->out->element('dd', array('id' => 'notice_text-count'),
                                     $contentLimit);
                 $this->out->elementEnd('dl');
@@ -194,13 +186,13 @@ class FacebookNoticeForm extends Form
      *
      * @return void
      */
-
     function formActions()
     {
         $this->out->element('input', array('id' => 'notice_action-submit',
                                            'class' => 'submit',
                                            'name' => 'status_submit',
                                            'type' => 'submit',
-                                           'value' => _('Send')));
+                                           // TRANS: Button text.
+                                           'value' => _m('BUTTON','Send')));
     }
 }
index 09cb333428df459305c8adfa1d67468e23f7fad2..b048a435f5744bf98e344920ff9553193cb737f6 100644 (file)
@@ -25,7 +25,6 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
 
 class FacebookremoveAction extends FacebookAction
 {
-
     function handle($args)
     {
         parent::handle($args);
@@ -65,5 +64,4 @@ class FacebookremoveAction extends FacebookAction
                 'unsuccessfully tried to remove a foreign link to Facebook!');
         }
     }
-
 }
index f94a346b570e2010c7e657ef40da400021d8fe81..1379b9a9cca981f24479cd0d3b2979d3948ea6f2 100644 (file)
@@ -25,7 +25,6 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookaction.php';
 
 class FacebooksettingsAction extends FacebookAction
 {
-
     function handle($args)
     {
         parent::handle($args);
@@ -40,7 +39,6 @@ class FacebooksettingsAction extends FacebookAction
      *
      * @return void
      */
-
     function showContent()
     {
         if ($this->arg('save')) {
@@ -62,6 +60,7 @@ class FacebooksettingsAction extends FacebookAction
         if ($result === false) {
             $this->showForm(_m('There was a problem saving your sync preferences!'));
         } else {
+            // TRANS: Confirmation that synchronisation settings have been saved into the system.
             $this->showForm(_m('Sync preferences saved.'), true);
         }
     }
@@ -99,16 +98,16 @@ class FacebooksettingsAction extends FacebookAction
 
             $this->elementStart('li');
 
-            $this->submit('save', _m('Save'));
+            // TRANS: Submit button to save synchronisation settings.
+            $this->submit('save', _m('BUTTON','Save'));
 
             $this->elementEnd('li');
 
             $this->elementEnd('ul');
 
             $this->elementEnd('form');
-
         } else {
-
+            // TRANS: %s is the application name.
             $instructions = sprintf(_m('If you would like %s to automatically update ' .
                 'your Facebook status with your latest notice, you need ' .
                 'to give it permission.'), $this->app_name);
@@ -127,12 +126,11 @@ class FacebooksettingsAction extends FacebookAction
             $this->elementEnd('li');
             $this->elementEnd('ul');
         }
-
     }
 
     function title()
     {
+        // TRANS: Page title for synchronisation settings.
         return _m('Sync preferences');
     }
-
 }
index 1290fed55778513396c07035d5c1d2cc72ec48c3..e78856f7c474eb0733e90109c685afcd5e88a1e8 100644 (file)
@@ -45,13 +45,11 @@ function getFacebook()
 }
 
 function isFacebookBound($notice, $flink) {
-
     if (empty($flink)) {
         return false;
     }
 
     // Avoid a loop
-
     if ($notice->source == 'Facebook') {
         common_log(LOG_INFO, "Skipping notice $notice->id because its " .
                    'source is Facebook.');
@@ -59,7 +57,6 @@ function isFacebookBound($notice, $flink) {
     }
 
     // If the user does not want to broadcast to Facebook, move along
-
     if (!($flink->noticesync & FOREIGN_NOTICE_SEND == FOREIGN_NOTICE_SEND)) {
         common_log(LOG_INFO, "Skipping notice $notice->id " .
             'because user has FOREIGN_NOTICE_SEND bit off.');
@@ -68,14 +65,12 @@ function isFacebookBound($notice, $flink) {
 
     // If it's not a reply, or if the user WANTS to send @-replies,
     // then, yeah, it can go to Facebook.
-
     if (!preg_match('/@[a-zA-Z0-9_]{1,15}\b/u', $notice->content) ||
         ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY)) {
         return true;
     }
 
     return false;
-
 }
 
 function facebookBroadcastNotice($notice)
@@ -87,16 +82,12 @@ function facebookBroadcastNotice($notice)
     );
 
     if (isFacebookBound($notice, $flink)) {
-
         // Okay, we're good to go, update the FB status
-
         $fbuid = $flink->foreign_id;
         $user = $flink->getUser();
 
         try {
-
             // Check permissions
-
             common_debug(
                 'FacebookPlugin - checking for publish_stream permission for user '
                 . "$user->nickname ($user->id), Facebook UID: $fbuid"
@@ -105,7 +96,6 @@ function facebookBroadcastNotice($notice)
             // NOTE: $facebook->api_client->users_hasAppPermission('publish_stream', $fbuid)
             // has been returning bogus results, so we're using FQL to check for
             // publish_stream permission now
-
             $fql = "SELECT publish_stream FROM permissions WHERE uid = $fbuid";
             $result = $facebook->api_client->fql_query($fql);
 
@@ -152,7 +142,6 @@ function facebookBroadcastNotice($notice)
             }
 
             // Post to Facebook
-
             if ($notice->hasAttachments() && $canPublish == 1) {
                 publishStream($notice, $user, $fbuid);
             } elseif ($canUpdate == 1 || $canPublish == 1) {
@@ -165,7 +154,6 @@ function facebookBroadcastNotice($notice)
             }
 
             // Finally, attempt to update the user's profile box
-
             if ($canPublish == 1 || $canUpdate == 1) {
                 updateProfileBox($facebook, $flink, $notice, $user);
             }
@@ -412,7 +400,6 @@ function remove_facebook_app($flink)
 
         common_log(LOG_WARNING, $msg);
     }
-
 }
 
 /**
@@ -423,7 +410,6 @@ function remove_facebook_app($flink)
  *
  * @return boolean success flag
  */
-
 function mail_facebook_app_removed($user)
 {
     $profile = $user->getProfile();
@@ -447,5 +433,4 @@ function mail_facebook_app_removed($user)
 
     common_switch_locale();
     return mail_to_user($user, $subject, $body);
-
 }
index 14bd372d6692da2d34d2f7008e36b9087733df51..e6215df01ec221b5f74a4ef7967ce241cfa27d3b 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-19 15:29+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,7 +16,7 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: facebookutil.php:439
+#: facebookutil.php:425
 #, php-format
 msgid ""
 "Hi, %1$s. We're sorry to inform you that we are unable to update your "
@@ -35,23 +35,24 @@ msgstr ""
 msgid "You must be logged into Facebook to use Facebook Connect."
 msgstr ""
 
-#: FBConnectAuth.php:77
-msgid "There is already a local user linked with this Facebook."
+#: FBConnectAuth.php:75
+msgid "There is already a local user linked with this Facebook account."
 msgstr ""
 
-#: FBConnectAuth.php:90 FBConnectSettings.php:164
+#: FBConnectAuth.php:87 FBConnectSettings.php:166
 msgid "There was a problem with your session token. Try again, please."
 msgstr ""
 
-#: FBConnectAuth.php:95
+#: FBConnectAuth.php:92
 msgid "You can't register if you don't agree to the license."
 msgstr ""
 
-#: FBConnectAuth.php:105
-msgid "Something weird happened."
+#: FBConnectAuth.php:102
+msgid "An unknown error has occured."
 msgstr ""
 
-#: FBConnectAuth.php:119
+#. TRANS: %s is the site name.
+#: FBConnectAuth.php:117
 #, php-format
 msgid ""
 "This is the first time you've logged into %s so we must connect your "
@@ -59,357 +60,469 @@ msgid ""
 "with your existing account, if you have one."
 msgstr ""
 
-#: FBConnectAuth.php:125
+#. TRANS: Page title.
+#: FBConnectAuth.php:124
 msgid "Facebook Account Setup"
 msgstr ""
 
+#. TRANS: Legend.
 #: FBConnectAuth.php:158
 msgid "Connection options"
 msgstr ""
 
-#: FBConnectAuth.php:183
-msgid "Create new account"
+#. TRANS: %s is the name of the license used by the user for their status updates.
+#: FBConnectAuth.php:168
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
 msgstr ""
 
+#. TRANS: Legend.
 #: FBConnectAuth.php:185
+msgid "Create new account"
+msgstr ""
+
+#: FBConnectAuth.php:187
 msgid "Create a new user with this nickname."
 msgstr ""
 
-#: FBConnectAuth.php:188
+#. TRANS: Field label.
+#: FBConnectAuth.php:191
 msgid "New nickname"
 msgstr ""
 
-#: FBConnectAuth.php:190
+#: FBConnectAuth.php:193
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
 msgstr ""
 
-#: FBConnectAuth.php:193
+#. TRANS: Submit button.
+#: FBConnectAuth.php:197
+msgctxt "BUTTON"
 msgid "Create"
 msgstr ""
 
-#: FBConnectAuth.php:198
+#: FBConnectAuth.php:203
 msgid "Connect existing account"
 msgstr ""
 
-#: FBConnectAuth.php:200
+#: FBConnectAuth.php:205
 msgid ""
 "If you already have an account, login with your username and password to "
 "connect it to your Facebook."
 msgstr ""
 
-#: FBConnectAuth.php:203
+#. TRANS: Field label.
+#: FBConnectAuth.php:209
 msgid "Existing nickname"
 msgstr ""
 
-#: FBConnectAuth.php:206 facebookaction.php:271
+#: FBConnectAuth.php:212 facebookaction.php:277
 msgid "Password"
 msgstr ""
 
-#: FBConnectAuth.php:209
+#. TRANS: Submit button.
+#: FBConnectAuth.php:216
+msgctxt "BUTTON"
 msgid "Connect"
 msgstr ""
 
-#: FBConnectAuth.php:225 FBConnectAuth.php:234
+#. TRANS: Client error trying to register with registrations not allowed.
+#. TRANS: Client error trying to register with registrations 'invite only'.
+#: FBConnectAuth.php:233 FBConnectAuth.php:243
 msgid "Registration not allowed."
 msgstr ""
 
-#: FBConnectAuth.php:241
+#. TRANS: Client error trying to register with an invalid invitation code.
+#: FBConnectAuth.php:251
 msgid "Not a valid invitation code."
 msgstr ""
 
-#: FBConnectAuth.php:251
+#: FBConnectAuth.php:261
 msgid "Nickname must have only lowercase letters and numbers and no spaces."
 msgstr ""
 
-#: FBConnectAuth.php:256
+#: FBConnectAuth.php:266
 msgid "Nickname not allowed."
 msgstr ""
 
-#: FBConnectAuth.php:261
+#: FBConnectAuth.php:271
 msgid "Nickname already in use. Try another one."
 msgstr ""
 
-#: FBConnectAuth.php:279 FBConnectAuth.php:313 FBConnectAuth.php:333
+#: FBConnectAuth.php:289 FBConnectAuth.php:323 FBConnectAuth.php:343
 msgid "Error connecting user to Facebook."
 msgstr ""
 
-#: FBConnectAuth.php:299
+#: FBConnectAuth.php:309
 msgid "Invalid username or password."
 msgstr ""
 
-#: facebooklogin.php:91 facebookaction.php:249 facebookaction.php:275
+#. TRANS: Page title.
+#: facebooklogin.php:90 facebookaction.php:255
 msgid "Login"
 msgstr ""
 
-#: facebookhome.php:111
-msgid "Server error - couldn't get user!"
+#. TRANS: Legend.
+#: facebooknoticeform.php:144
+msgid "Send a notice"
 msgstr ""
 
-#: facebookhome.php:131
-msgid "Incorrect username or password."
+#. TRANS: Field label.
+#: facebooknoticeform.php:157
+#, php-format
+msgid "What's up, %s?"
 msgstr ""
 
-#: facebookhome.php:158
-#, php-format
-msgid "%s and friends, page %d"
+#: facebooknoticeform.php:169
+msgid "Available characters"
+msgstr ""
+
+#. TRANS: Button text.
+#: facebooknoticeform.php:196
+msgctxt "BUTTON"
+msgid "Send"
 msgstr ""
 
-#: facebookhome.php:160
+#: facebookhome.php:103
+msgid "Server error: Couldn't get user!"
+msgstr ""
+
+#: facebookhome.php:122
+msgid "Incorrect username or password."
+msgstr ""
+
+#. TRANS: Page title.
+#. TRANS: %s is a user nickname
+#: facebookhome.php:157
 #, php-format
 msgid "%s and friends"
 msgstr ""
 
-#: facebookhome.php:189
+#. TRANS: Instructions. %s is the application name.
+#: facebookhome.php:185
 #, php-format
 msgid ""
 "If you would like the %s app to automatically update your Facebook status "
 "with your latest notice, you need to give it permission."
 msgstr ""
 
-#: facebookhome.php:213
+#: facebookhome.php:210
 msgid "Okay, do it!"
 msgstr ""
 
-#: facebookhome.php:219
+#. TRANS: Button text. Clicking the button will skip updating Facebook permissions.
+#: facebookhome.php:217
+msgctxt "BUTTON"
 msgid "Skip"
 msgstr ""
 
-#: facebookhome.php:248 facebookaction.php:330
+#: facebookhome.php:244 facebookaction.php:336
 msgid "Pagination"
 msgstr ""
 
-#: facebookhome.php:257 facebookaction.php:339
+#. TRANS: Pagination link.
+#: facebookhome.php:254 facebookaction.php:345
 msgid "After"
 msgstr ""
 
-#: facebookhome.php:265 facebookaction.php:347
+#. TRANS: Pagination link.
+#: facebookhome.php:263 facebookaction.php:353
 msgid "Before"
 msgstr ""
 
-#: facebookinvite.php:72
+#. TRANS: %s is the name of the site.
+#: facebookinvite.php:69
 #, php-format
-msgid "Thanks for inviting your friends to use %s"
+msgid "Thanks for inviting your friends to use %s."
 msgstr ""
 
-#: facebookinvite.php:74
+#. TRANS: Followed by an unordered list with invited friends.
+#: facebookinvite.php:72
 msgid "Invitations have been sent to the following users:"
 msgstr ""
 
-#: facebookinvite.php:94
+#: facebookinvite.php:91
 #, php-format
 msgid "You have been invited to %s"
 msgstr ""
 
-#: facebookinvite.php:103
+#. TRANS: %s is the name of the site.
+#: facebookinvite.php:101
 #, php-format
 msgid "Invite your friends to use %s"
 msgstr ""
 
-#: facebookinvite.php:125
+#. TRANS: %s is the name of the site.
+#: facebookinvite.php:124
 #, php-format
 msgid "Friends already using %s:"
 msgstr ""
 
+#. TRANS: Page title.
 #: facebookinvite.php:143
 msgid "Send invitations"
 msgstr ""
 
-#: FacebookPlugin.php:195 FacebookPlugin.php:488 FacebookPlugin.php:510
-#: facebookadminpanel.php:54
+#. TRANS: Menu item.
+#. TRANS: Menu item tab.
+#: FacebookPlugin.php:188 FacebookPlugin.php:461 FacebookPlugin.php:485
+msgctxt "MENU"
 msgid "Facebook"
 msgstr ""
 
-#: FacebookPlugin.php:196
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookPlugin.php:190
 msgid "Facebook integration configuration"
 msgstr ""
 
-#: FacebookPlugin.php:489
+#: FacebookPlugin.php:431
+msgid "Facebook Connect User"
+msgstr ""
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookPlugin.php:463
 msgid "Login or register using Facebook"
 msgstr ""
 
-#: FacebookPlugin.php:511 FBConnectSettings.php:56
+#. TRANS: Tooltip for menu item "Facebook".
+#. TRANS: Page title.
+#: FacebookPlugin.php:487 FBConnectSettings.php:55
 msgid "Facebook Connect Settings"
 msgstr ""
 
-#: FacebookPlugin.php:617
+#: FacebookPlugin.php:591
 msgid ""
-"The Facebook plugin allows you to integrate your StatusNet instance with <a "
-"href=\"http://facebook.com/\">Facebook</a> and Facebook Connect."
+"The Facebook plugin allows integrating StatusNet instances with <a href="
+"\"http://facebook.com/\">Facebook</a> and Facebook Connect."
 msgstr ""
 
 #: FBConnectLogin.php:33
 msgid "Already logged in."
 msgstr ""
 
-#: FBConnectLogin.php:41
+#. TRANS: Instructions.
+#: FBConnectLogin.php:42
 msgid "Login with your Facebook Account"
 msgstr ""
 
-#: FBConnectLogin.php:55
+#. TRANS: Page title.
+#: FBConnectLogin.php:57
 msgid "Facebook Login"
 msgstr ""
 
-#: facebookremove.php:58
+#: facebookremove.php:57
 msgid "Couldn't remove Facebook user."
 msgstr ""
 
+#. TRANS: Link description for 'Home' link that leads to a start page.
+#: facebookaction.php:169
+msgctxt "MENU"
+msgid "Home"
+msgstr ""
+
+#. TRANS: Tooltip for 'Home' link that leads to a start page.
 #: facebookaction.php:171
 msgid "Home"
 msgstr ""
 
-#: facebookaction.php:179
+#. TRANS: Link description for 'Invite' link that leads to a page where friends can be invited.
+#: facebookaction.php:180
+msgctxt "MENU"
+msgid "Invite"
+msgstr ""
+
+#. TRANS: Tooltip for 'Invite' link that leads to a page where friends can be invited.
+#: facebookaction.php:182
 msgid "Invite"
 msgstr ""
 
-#: facebookaction.php:188
+#. TRANS: Link description for 'Settings' link that leads to a page user preferences can be set.
+#: facebookaction.php:192
+msgctxt "MENU"
+msgid "Settings"
+msgstr ""
+
+#. TRANS: Tooltip for 'Settings' link that leads to a page user preferences can be set.
+#: facebookaction.php:194
 msgid "Settings"
 msgstr ""
 
-#: facebookaction.php:228
+#: facebookaction.php:233
 #, php-format
 msgid ""
 "To use the %s Facebook Application you need to login with your username and "
-"password. Don't have a username yet? "
+"password. Don't have a username yet?"
 msgstr ""
 
-#: facebookaction.php:230
+#: facebookaction.php:235
 msgid " a new account."
 msgstr ""
 
-#: facebookaction.php:236
+#: facebookaction.php:242
 msgid "Register"
 msgstr ""
 
-#: facebookaction.php:268
+#: facebookaction.php:274
 msgid "Nickname"
 msgstr ""
 
-#: facebookaction.php:281
+#. TRANS: Login button.
+#: facebookaction.php:282
+msgctxt "BUTTON"
+msgid "Login"
+msgstr ""
+
+#: facebookaction.php:288
 msgid "Lost or forgotten password?"
 msgstr ""
 
-#: facebookaction.php:365
+#: facebookaction.php:370
 msgid "No notice content!"
 msgstr ""
 
-#: facebookaction.php:371
+#: facebookaction.php:377
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
 msgstr ""
 
-#: facebookaction.php:430
+#: facebookaction.php:431
 msgid "Notices"
 msgstr ""
 
-#: facebookadminpanel.php:65
+#: facebookadminpanel.php:52
+msgid "Facebook"
+msgstr ""
+
+#: facebookadminpanel.php:62
 msgid "Facebook integration settings"
 msgstr ""
 
-#: facebookadminpanel.php:129
+#: facebookadminpanel.php:123
 msgid "Invalid Facebook API key. Max length is 255 characters."
 msgstr ""
 
-#: facebookadminpanel.php:135
+#: facebookadminpanel.php:129
 msgid "Invalid Facebook API secret. Max length is 255 characters."
 msgstr ""
 
-#: facebookadminpanel.php:188
+#: facebookadminpanel.php:178
 msgid "Facebook application settings"
 msgstr ""
 
-#: facebookadminpanel.php:194
+#: facebookadminpanel.php:184
 msgid "API key"
 msgstr ""
 
-#: facebookadminpanel.php:195
+#: facebookadminpanel.php:185
 msgid "API key provided by Facebook"
 msgstr ""
 
-#: facebookadminpanel.php:203
+#: facebookadminpanel.php:193
 msgid "Secret"
 msgstr ""
 
-#: facebookadminpanel.php:204
+#: facebookadminpanel.php:194
 msgid "API secret provided by Facebook"
 msgstr ""
 
-#: FBConnectSettings.php:67
+#: facebookadminpanel.php:210
+msgid "Save"
+msgstr ""
+
+#: facebookadminpanel.php:210
+msgid "Save Facebook settings"
+msgstr ""
+
+#. TRANS: Instructions.
+#: FBConnectSettings.php:66
 msgid "Manage how your account connects to Facebook"
 msgstr ""
 
-#: FBConnectSettings.php:92
+#: FBConnectSettings.php:90
 msgid "There is no Facebook user connected to this account."
 msgstr ""
 
-#: FBConnectSettings.php:100
+#: FBConnectSettings.php:98
 msgid "Connected Facebook user"
 msgstr ""
 
-#: FBConnectSettings.php:119
+#. TRANS: Legend.
+#: FBConnectSettings.php:118
 msgid "Disconnect my account from Facebook"
 msgstr ""
 
-#: FBConnectSettings.php:124
+#. TRANS: Followed by a link containing text "set a password".
+#: FBConnectSettings.php:125
 msgid ""
 "Disconnecting your Faceboook would make it impossible to log in! Please "
 msgstr ""
 
-#: FBConnectSettings.php:128
+#. TRANS: Preceded by "Please " and followed by " first."
+#: FBConnectSettings.php:130
 msgid "set a password"
 msgstr ""
 
-#: FBConnectSettings.php:130
+#. TRANS: Preceded by "Please set a password".
+#: FBConnectSettings.php:132
 msgid " first."
 msgstr ""
 
-#: FBConnectSettings.php:142
+#. TRANS: Submit button.
+#: FBConnectSettings.php:145
+msgctxt "BUTTON"
 msgid "Disconnect"
 msgstr ""
 
-#: FBConnectSettings.php:178
+#: FBConnectSettings.php:180
 msgid "Couldn't delete link to Facebook."
 msgstr ""
 
-#: FBConnectSettings.php:194
+#: FBConnectSettings.php:196
 msgid "You have disconnected from Facebook."
 msgstr ""
 
-#: FBConnectSettings.php:197
+#: FBConnectSettings.php:199
 msgid "Not sure what you're trying to do."
 msgstr ""
 
-#: facebooksettings.php:63
+#: facebooksettings.php:61
 msgid "There was a problem saving your sync preferences!"
 msgstr ""
 
-#: facebooksettings.php:65
+#. TRANS: Confirmation that synchronisation settings have been saved into the system.
+#: facebooksettings.php:64
 msgid "Sync preferences saved."
 msgstr ""
 
-#: facebooksettings.php:88
+#: facebooksettings.php:87
 msgid "Automatically update my Facebook status with my notices."
 msgstr ""
 
-#: facebooksettings.php:95
+#: facebooksettings.php:94
 msgid "Send \"@\" replies to Facebook."
 msgstr ""
 
+#. TRANS: Submit button to save synchronisation settings.
 #: facebooksettings.php:102
+msgctxt "BUTTON"
 msgid "Save"
 msgstr ""
 
-#: facebooksettings.php:112
+#. TRANS: %s is the application name.
+#: facebooksettings.php:111
 #, php-format
 msgid ""
 "If you would like %s to automatically update your Facebook status with your "
 "latest notice, you need to give it permission."
 msgstr ""
 
-#: facebooksettings.php:125
+#: facebooksettings.php:124
 #, php-format
 msgid "Allow %s to update my Facebook status"
 msgstr ""
 
-#: facebooksettings.php:135
+#. TRANS: Page title for synchronisation settings.
+#: facebooksettings.php:134
 msgid "Sync preferences"
 msgstr ""
index d984ec1af416df62a1e5c62a5a20eb8d721ee9c6..27f760c81cb77913b8b5493eac6dbab25e8e5b87 100644 (file)
@@ -69,4 +69,3 @@ class FirePHPPlugin extends Plugin
         return true;
     }
 }
-
index c4b10a499e44bf6936c981b4d0f97b9b58cd9146..ebcc8d3febca23c265b670cfb518321b57b8e848 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+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"
diff --git a/plugins/GeoURL/GeoURLPlugin.php b/plugins/GeoURL/GeoURLPlugin.php
new file mode 100644 (file)
index 0000000..91da81a
--- /dev/null
@@ -0,0 +1,128 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to add ICBM metadata to HTML pages and report data to GeoURL.org
+ *
+ * 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  Action
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Plugin to add ICBM metadata to HTML pages and report data to GeoURL.org
+ *
+ * Adds metadata to notice and profile pages that geourl.org and others
+ * understand. Also, pings geourl.org when a new notice is saved or
+ * a profile is changed.
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@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/
+ *
+ * @seeAlso  Location
+ */
+class GeoURLPlugin extends Plugin
+{
+    public $ping = 'http://geourl.org/ping/';
+
+    /**
+     * Add extra <meta> headers for certain pages that geourl.org understands
+     *
+     * @param Action $action page being shown
+     *
+     * @return boolean event handler flag
+     */
+    function onEndShowHeadElements($action)
+    {
+        $name = $action->trimmed('action');
+
+        $location = null;
+
+        if ($name == 'showstream') {
+            $profile = $action->profile;
+            if (!empty($profile) && !empty($profile->lat) && !empty($profile->lon)) {
+                $location = $profile->lat . ', ' . $profile->lon;
+            }
+        } else if ($name == 'shownotice') {
+            $notice = $action->profile;
+            if (!empty($notice) && !empty($notice->lat) && !empty($notice->lon)) {
+                $location = $notice->lat . ', ' . $notice->lon;
+            }
+        }
+
+        if (!empty($location)) {
+            $action->element('meta', array('name' => 'ICBM',
+                                           'content' => $location));
+            $action->element('meta', array('name' => 'DC.title',
+                                           'content' => $action->title()));
+        }
+
+        return true;
+    }
+
+    /**
+     * Report local notices to GeoURL.org when they're created
+     *
+     * @param Notice &$notice queued notice
+     *
+     * @return boolean event handler flag
+     */
+    function onHandleQueuedNotice(&$notice)
+    {
+        if ($notice->is_local == 1) {
+
+            $request = HTTPClient::start();
+
+            $url = common_local_url('shownotice',
+                                    array('notice' => $notice->id));
+
+            try {
+                $request->post($this->ping,
+                               null,
+                               array('p' => $url));
+            } catch (HTTP_Request2_Exception $e) {
+                common_log(LOG_WARNING,
+                           "GeoURL.org ping failed for '$url' ($this->ping)");
+            }
+        }
+
+        return true;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'GeoURL',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:GeoURL',
+                            'rawdescription' =>
+                            _m('Ping <a href="http://geourl.org/">GeoURL</a> when '.
+                               'new geolocation-enhanced notices are posted.'));
+        return true;
+    }
+}
diff --git a/plugins/GeoURL/locale/GeoURL.pot b/plugins/GeoURL/locale/GeoURL.pot
new file mode 100644 (file)
index 0000000..3bc63b8
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: GeoURLPlugin.php:127
+msgid ""
+"Ping <a href=\"http://geourl.org/\">GeoURL</a> when new geolocation-enhanced "
+"notices are posted."
+msgstr ""
diff --git a/plugins/GeoURLPlugin.php b/plugins/GeoURLPlugin.php
deleted file mode 100644 (file)
index 01178f3..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to add ICBM metadata to HTML pages and report data to GeoURL.org
- *
- * 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  Action
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Plugin to add ICBM metadata to HTML pages and report data to GeoURL.org
- *
- * Adds metadata to notice and profile pages that geourl.org and others
- * understand. Also, pings geourl.org when a new notice is saved or
- * a profile is changed.
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Evan Prodromou <evan@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/
- *
- * @seeAlso  Location
- */
-
-class GeoURLPlugin extends Plugin
-{
-    public $ping = 'http://geourl.org/ping/';
-
-    /**
-     * Add extra <meta> headers for certain pages that geourl.org understands
-     *
-     * @param Action $action page being shown
-     *
-     * @return boolean event handler flag
-     */
-
-    function onEndShowHeadElements($action)
-    {
-        $name = $action->trimmed('action');
-
-        $location = null;
-
-        if ($name == 'showstream') {
-            $profile = $action->profile;
-            if (!empty($profile) && !empty($profile->lat) && !empty($profile->lon)) {
-                $location = $profile->lat . ', ' . $profile->lon;
-            }
-        } else if ($name == 'shownotice') {
-            $notice = $action->profile;
-            if (!empty($notice) && !empty($notice->lat) && !empty($notice->lon)) {
-                $location = $notice->lat . ', ' . $notice->lon;
-            }
-        }
-
-        if (!empty($location)) {
-            $action->element('meta', array('name' => 'ICBM',
-                                           'content' => $location));
-            $action->element('meta', array('name' => 'DC.title',
-                                           'content' => $action->title()));
-        }
-
-        return true;
-    }
-
-    /**
-     * Report local notices to GeoURL.org when they're created
-     *
-     * @param Notice &$notice queued notice
-     *
-     * @return boolean event handler flag
-     */
-
-    function onHandleQueuedNotice(&$notice)
-    {
-        if ($notice->is_local == 1) {
-
-            $request = HTTPClient::start();
-
-            $url = common_local_url('shownotice',
-                                    array('notice' => $notice->id));
-
-            try {
-                $request->post($this->ping,
-                               null,
-                               array('p' => $url));
-            } catch (HTTP_Request2_Exception $e) {
-                common_log(LOG_WARNING,
-                           "GeoURL.org ping failed for '$url' ($this->ping)");
-            }
-        }
-
-        return true;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'GeoURL',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:GeoURL',
-                            'rawdescription' =>
-                            _m('Ping <a href="http://geourl.org/">GeoURL</a> when '.
-                               'new geolocation-enhanced notices are posted.'));
-        return true;
-    }
-}
diff --git a/plugins/Geonames/GeonamesPlugin.php b/plugins/Geonames/GeonamesPlugin.php
new file mode 100644 (file)
index 0000000..310641c
--- /dev/null
@@ -0,0 +1,503 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to convert string locations to Geonames IDs and vice versa
+ *
+ * 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  Action
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Plugin to convert string locations to Geonames IDs and vice versa
+ *
+ * This handles most of the events that Location class emits. It uses
+ * the geonames.org Web service to convert names like 'Montreal, Quebec, Canada'
+ * into IDs and lat/lon pairs.
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@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/
+ *
+ * @seeAlso  Location
+ */
+class GeonamesPlugin extends Plugin
+{
+    const LOCATION_NS = 1;
+
+    public $host     = 'ws.geonames.org';
+    public $username = null;
+    public $token    = null;
+    public $expiry   = 7776000; // 90-day expiry
+    public $timeout  = 2;       // Web service timeout in seconds.
+    public $timeoutWindow = 60; // Further lookups in this process will be disabled for N seconds after a timeout.
+    public $cachePrefix = null; // Optional shared memcache prefix override
+                                // to share lookups between local instances.
+
+    protected $lastTimeout = null; // timestamp of last web service timeout
+
+    /**
+     * convert a name into a Location object
+     *
+     * @param string   $name      Name to convert
+     * @param string   $language  ISO code for anguage the name is in
+     * @param Location &$location Location object (may be null)
+     *
+     * @return boolean whether to continue (results in $location)
+     */
+    function onLocationFromName($name, $language, &$location)
+    {
+        $loc = $this->getCache(array('name' => $name,
+                                     'language' => $language));
+
+        if ($loc !== false) {
+            $location = $loc;
+            return false;
+        }
+
+        try {
+            $geonames = $this->getGeonames('search',
+                                           array('maxRows' => 1,
+                                                 'q' => $name,
+                                                 'lang' => $language,
+                                                 'type' => 'xml'));
+        } catch (Exception $e) {
+            $this->log(LOG_WARNING, "Error for $name: " . $e->getMessage());
+            return true;
+        }
+
+        if (count($geonames) == 0) {
+            // no results
+            $this->setCache(array('name' => $name,
+                                  'language' => $language),
+                            null);
+            return true;
+        }
+
+        $n = $geonames[0];
+
+        $location = new Location();
+
+        $location->lat              = $this->canonical($n->lat);
+        $location->lon              = $this->canonical($n->lng);
+        $location->names[$language] = (string)$n->name;
+        $location->location_id      = (string)$n->geonameId;
+        $location->location_ns      = self::LOCATION_NS;
+
+        $this->setCache(array('name' => $name,
+                              'language' => $language),
+                        $location);
+
+        // handled, don't continue processing!
+        return false;
+    }
+
+    /**
+     * convert an id into a Location object
+     *
+     * @param string   $id        Name to convert
+     * @param string   $ns        Name to convert
+     * @param string   $language  ISO code for language for results
+     * @param Location &$location Location object (may be null)
+     *
+     * @return boolean whether to continue (results in $location)
+     */
+    function onLocationFromId($id, $ns, $language, &$location)
+    {
+        if ($ns != self::LOCATION_NS) {
+            // It's not one of our IDs... keep processing
+            return true;
+        }
+
+        $loc = $this->getCache(array('id' => $id));
+
+        if ($loc !== false) {
+            $location = $loc;
+            return false;
+        }
+
+        try {
+            $geonames = $this->getGeonames('hierarchy',
+                                           array('geonameId' => $id,
+                                                 'lang' => $language));
+        } catch (Exception $e) {
+            $this->log(LOG_WARNING, "Error for ID $id: " . $e->getMessage());
+            return false;
+        }
+
+        $parts = array();
+
+        foreach ($geonames as $level) {
+            if (in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
+                $parts[] = (string)$level->name;
+            }
+        }
+
+        $last = $geonames[count($geonames)-1];
+
+        if (!in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
+            $parts[] = (string)$last->name;
+        }
+
+        $location = new Location();
+
+        $location->location_id      = (string)$last->geonameId;
+        $location->location_ns      = self::LOCATION_NS;
+        $location->lat              = $this->canonical($last->lat);
+        $location->lon              = $this->canonical($last->lng);
+
+        $location->names[$language] = implode(', ', array_reverse($parts));
+
+        $this->setCache(array('id' => (string)$last->geonameId),
+                        $location);
+
+        // We're responsible for this namespace; nobody else
+        // can resolve it
+
+        return false;
+    }
+
+    /**
+     * convert a lat/lon pair into a Location object
+     *
+     * Given a lat/lon, we try to find a Location that's around
+     * it or nearby. We prefer populated places (cities, towns, villages).
+     *
+     * @param string   $lat       Latitude
+     * @param string   $lon       Longitude
+     * @param string   $language  ISO code for language for results
+     * @param Location &$location Location object (may be null)
+     *
+     * @return boolean whether to continue (results in $location)
+     */
+    function onLocationFromLatLon($lat, $lon, $language, &$location)
+    {
+        // Make sure they're canonical
+
+        $lat = $this->canonical($lat);
+        $lon = $this->canonical($lon);
+
+        $loc = $this->getCache(array('lat' => $lat,
+                                     'lon' => $lon));
+
+        if ($loc !== false) {
+            $location = $loc;
+            return false;
+        }
+
+        try {
+          $geonames = $this->getGeonames('findNearbyPlaceName',
+                                         array('lat' => $lat,
+                                               'lng' => $lon,
+                                               'lang' => $language));
+        } catch (Exception $e) {
+            $this->log(LOG_WARNING, "Error for coords $lat, $lon: " . $e->getMessage());
+            return true;
+        }
+
+        if (count($geonames) == 0) {
+            // no results
+            $this->setCache(array('lat' => $lat,
+                                  'lon' => $lon),
+                            null);
+            return true;
+        }
+
+        $n = $geonames[0];
+
+        $parts = array();
+
+        $location = new Location();
+
+        $parts[] = (string)$n->name;
+
+        if (!empty($n->adminName1)) {
+            $parts[] = (string)$n->adminName1;
+        }
+
+        if (!empty($n->countryName)) {
+            $parts[] = (string)$n->countryName;
+        }
+
+        $location->location_id = (string)$n->geonameId;
+        $location->location_ns = self::LOCATION_NS;
+        $location->lat         = $this->canonical($n->lat);
+        $location->lon         = $this->canonical($n->lng);
+
+        $location->names[$language] = implode(', ', $parts);
+
+        $this->setCache(array('lat' => $lat,
+                              'lon' => $lon),
+                        $location);
+
+        // Success! We handled it, so no further processing
+
+        return false;
+    }
+
+    /**
+     * Human-readable name for a location
+     *
+     * Given a location, we try to retrieve a human-readable name
+     * in the target language.
+     *
+     * @param Location $location Location to get the name for
+     * @param string   $language ISO code for language to find name in
+     * @param string   &$name    Place to put the name
+     *
+     * @return boolean whether to continue
+     */
+    function onLocationNameLanguage($location, $language, &$name)
+    {
+        if ($location->location_ns != self::LOCATION_NS) {
+            // It's not one of our IDs... keep processing
+            return true;
+        }
+
+        $id = $location->location_id;
+
+        $n = $this->getCache(array('id' => $id,
+                                   'language' => $language));
+
+        if ($n !== false) {
+            $name = $n;
+            return false;
+        }
+
+        try {
+            $geonames = $this->getGeonames('hierarchy',
+                                           array('geonameId' => $id,
+                                                 'lang' => $language));
+        } catch (Exception $e) {
+            $this->log(LOG_WARNING, "Error for ID $id: " . $e->getMessage());
+            return false;
+        }
+
+        if (count($geonames) == 0) {
+            $this->setCache(array('id' => $id,
+                                  'language' => $language),
+                            null);
+            return false;
+        }
+
+        $parts = array();
+
+        foreach ($geonames as $level) {
+            if (in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
+                $parts[] = (string)$level->name;
+            }
+        }
+
+        $last = $geonames[count($geonames)-1];
+
+        if (!in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
+            $parts[] = (string)$last->name;
+        }
+
+        if (count($parts)) {
+            $name = implode(', ', array_reverse($parts));
+            $this->setCache(array('id' => $id,
+                                  'language' => $language),
+                            $name);
+        }
+
+        return false;
+    }
+
+    /**
+     * Human-readable URL for a location
+     *
+     * Given a location, we try to retrieve a geonames.org URL.
+     *
+     * @param Location $location Location to get the url for
+     * @param string   &$url     Place to put the url
+     *
+     * @return boolean whether to continue
+     */
+    function onLocationUrl($location, &$url)
+    {
+        if ($location->location_ns != self::LOCATION_NS) {
+            // It's not one of our IDs... keep processing
+            return true;
+        }
+
+        $url = 'http://www.geonames.org/' . $location->location_id;
+
+        // it's been filled, so don't process further.
+        return false;
+    }
+
+    /**
+     * Machine-readable name for a location
+     *
+     * Given a location, we try to retrieve a geonames.org URL.
+     *
+     * @param Location $location Location to get the url for
+     * @param string   &$url     Place to put the url
+     *
+     * @return boolean whether to continue
+     */
+    function onLocationRdfUrl($location, &$url)
+    {
+        if ($location->location_ns != self::LOCATION_NS) {
+            // It's not one of our IDs... keep processing
+            return true;
+        }
+
+        $url = 'http://sws.geonames.org/' . $location->location_id . '/';
+
+        // it's been filled, so don't process further.
+        return false;
+    }
+
+    function getCache($attrs)
+    {
+        $c = common_memcache();
+
+        if (empty($c)) {
+            return null;
+        }
+
+        $key = $this->cacheKey($attrs);
+
+        $value = $c->get($key);
+
+        return $value;
+    }
+
+    function setCache($attrs, $loc)
+    {
+        $c = common_memcache();
+
+        if (empty($c)) {
+            return null;
+        }
+
+        $key = $this->cacheKey($attrs);
+
+        $result = $c->set($key, $loc, 0, time() + $this->expiry);
+
+        return $result;
+    }
+
+    function cacheKey($attrs)
+    {
+        $key = 'geonames:' .
+               implode(',', array_keys($attrs)) . ':'.
+               common_keyize(implode(',', array_values($attrs)));
+        if ($this->cachePrefix) {
+            return $this->cachePrefix . ':' . $key;
+        } else {
+            return common_cache_key($key);
+        }
+    }
+
+    function wsUrl($method, $params)
+    {
+        if (!empty($this->username)) {
+            $params['username'] = $this->username;
+        }
+
+        if (!empty($this->token)) {
+            $params['token'] = $this->token;
+        }
+
+        $str = http_build_query($params, null, '&');
+
+        return 'http://'.$this->host.'/'.$method.'?'.$str;
+    }
+
+    function getGeonames($method, $params)
+    {
+        if ($this->lastTimeout && (time() - $this->lastTimeout < $this->timeoutWindow)) {
+            throw new Exception("skipping due to recent web service timeout");
+        }
+
+        $client = HTTPClient::start();
+        $client->setConfig('connect_timeout', $this->timeout);
+        $client->setConfig('timeout', $this->timeout);
+
+        try {
+            $result = $client->get($this->wsUrl($method, $params));
+        } catch (Exception $e) {
+            common_log(LOG_ERR, __METHOD__ . ": " . $e->getMessage());
+            $this->lastTimeout = time();
+            throw $e;
+        }
+
+        if (!$result->isOk()) {
+            throw new Exception("HTTP error code " . $result->getStatus());
+        }
+
+        $body = $result->getBody();
+
+        if (empty($body)) {
+            throw new Exception("Empty HTTP body in response");
+        }
+
+        // This will throw an exception if the XML is mal-formed
+
+        $document = new SimpleXMLElement($body);
+
+        // No children, usually no results
+
+        $children = $document->children();
+
+        if (count($children) == 0) {
+            return array();
+        }
+
+        if (isset($document->status)) {
+            throw new Exception("Error #".$document->status['value']." ('".$document->status['message']."')");
+        }
+
+        // Array of elements, >0 elements
+
+        return $document->geoname;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Geonames',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:Geonames',
+                            'rawdescription' =>
+                            _m('Uses <a href="http://geonames.org/">Geonames</a> service to get human-readable '.
+                               'names for locations based on user-provided lat/long pairs.'));
+        return true;
+    }
+
+    function canonical($coord)
+    {
+        $coord = rtrim($coord, "0");
+        $coord = rtrim($coord, ".");
+
+        return $coord;
+    }
+}
diff --git a/plugins/Geonames/locale/Geonames.pot b/plugins/Geonames/locale/Geonames.pot
new file mode 100644 (file)
index 0000000..1d91af3
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: GeonamesPlugin.php:498
+msgid ""
+"Uses <a href=\"http://geonames.org/\">Geonames</a> service to get human-"
+"readable names for locations based on user-provided lat/long pairs."
+msgstr ""
diff --git a/plugins/GeonamesPlugin.php b/plugins/GeonamesPlugin.php
deleted file mode 100644 (file)
index 3815a31..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to convert string locations to Geonames IDs and vice versa
- *
- * 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  Action
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Plugin to convert string locations to Geonames IDs and vice versa
- *
- * This handles most of the events that Location class emits. It uses
- * the geonames.org Web service to convert names like 'Montreal, Quebec, Canada'
- * into IDs and lat/lon pairs.
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Evan Prodromou <evan@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/
- *
- * @seeAlso  Location
- */
-
-class GeonamesPlugin extends Plugin
-{
-    const LOCATION_NS = 1;
-
-    public $host     = 'ws.geonames.org';
-    public $username = null;
-    public $token    = null;
-    public $expiry   = 7776000; // 90-day expiry
-    public $timeout  = 2;       // Web service timeout in seconds.
-    public $timeoutWindow = 60; // Further lookups in this process will be disabled for N seconds after a timeout.
-    public $cachePrefix = null; // Optional shared memcache prefix override
-                                // to share lookups between local instances.
-
-    protected $lastTimeout = null; // timestamp of last web service timeout
-
-    /**
-     * convert a name into a Location object
-     *
-     * @param string   $name      Name to convert
-     * @param string   $language  ISO code for anguage the name is in
-     * @param Location &$location Location object (may be null)
-     *
-     * @return boolean whether to continue (results in $location)
-     */
-
-    function onLocationFromName($name, $language, &$location)
-    {
-        $loc = $this->getCache(array('name' => $name,
-                                     'language' => $language));
-
-        if ($loc !== false) {
-            $location = $loc;
-            return false;
-        }
-
-        try {
-            $geonames = $this->getGeonames('search',
-                                           array('maxRows' => 1,
-                                                 'q' => $name,
-                                                 'lang' => $language,
-                                                 'type' => 'xml'));
-        } catch (Exception $e) {
-            $this->log(LOG_WARNING, "Error for $name: " . $e->getMessage());
-            return true;
-        }
-
-        if (count($geonames) == 0) {
-            // no results
-            $this->setCache(array('name' => $name,
-                                  'language' => $language),
-                            null);
-            return true;
-        }
-
-        $n = $geonames[0];
-
-        $location = new Location();
-
-        $location->lat              = $this->canonical($n->lat);
-        $location->lon              = $this->canonical($n->lng);
-        $location->names[$language] = (string)$n->name;
-        $location->location_id      = (string)$n->geonameId;
-        $location->location_ns      = self::LOCATION_NS;
-
-        $this->setCache(array('name' => $name,
-                              'language' => $language),
-                        $location);
-
-        // handled, don't continue processing!
-        return false;
-    }
-
-    /**
-     * convert an id into a Location object
-     *
-     * @param string   $id        Name to convert
-     * @param string   $ns        Name to convert
-     * @param string   $language  ISO code for language for results
-     * @param Location &$location Location object (may be null)
-     *
-     * @return boolean whether to continue (results in $location)
-     */
-
-    function onLocationFromId($id, $ns, $language, &$location)
-    {
-        if ($ns != self::LOCATION_NS) {
-            // It's not one of our IDs... keep processing
-            return true;
-        }
-
-        $loc = $this->getCache(array('id' => $id));
-
-        if ($loc !== false) {
-            $location = $loc;
-            return false;
-        }
-
-        try {
-            $geonames = $this->getGeonames('hierarchy',
-                                           array('geonameId' => $id,
-                                                 'lang' => $language));
-        } catch (Exception $e) {
-            $this->log(LOG_WARNING, "Error for ID $id: " . $e->getMessage());
-            return false;
-        }
-
-        $parts = array();
-
-        foreach ($geonames as $level) {
-            if (in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
-                $parts[] = (string)$level->name;
-            }
-        }
-
-        $last = $geonames[count($geonames)-1];
-
-        if (!in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
-            $parts[] = (string)$last->name;
-        }
-
-        $location = new Location();
-
-        $location->location_id      = (string)$last->geonameId;
-        $location->location_ns      = self::LOCATION_NS;
-        $location->lat              = $this->canonical($last->lat);
-        $location->lon              = $this->canonical($last->lng);
-
-        $location->names[$language] = implode(', ', array_reverse($parts));
-
-        $this->setCache(array('id' => (string)$last->geonameId),
-                        $location);
-
-        // We're responsible for this namespace; nobody else
-        // can resolve it
-
-        return false;
-    }
-
-    /**
-     * convert a lat/lon pair into a Location object
-     *
-     * Given a lat/lon, we try to find a Location that's around
-     * it or nearby. We prefer populated places (cities, towns, villages).
-     *
-     * @param string   $lat       Latitude
-     * @param string   $lon       Longitude
-     * @param string   $language  ISO code for language for results
-     * @param Location &$location Location object (may be null)
-     *
-     * @return boolean whether to continue (results in $location)
-     */
-
-    function onLocationFromLatLon($lat, $lon, $language, &$location)
-    {
-        // Make sure they're canonical
-
-        $lat = $this->canonical($lat);
-        $lon = $this->canonical($lon);
-
-        $loc = $this->getCache(array('lat' => $lat,
-                                     'lon' => $lon));
-
-        if ($loc !== false) {
-            $location = $loc;
-            return false;
-        }
-
-        try {
-          $geonames = $this->getGeonames('findNearbyPlaceName',
-                                         array('lat' => $lat,
-                                               'lng' => $lon,
-                                               'lang' => $language));
-        } catch (Exception $e) {
-            $this->log(LOG_WARNING, "Error for coords $lat, $lon: " . $e->getMessage());
-            return true;
-        }
-
-        if (count($geonames) == 0) {
-            // no results
-            $this->setCache(array('lat' => $lat,
-                                  'lon' => $lon),
-                            null);
-            return true;
-        }
-
-        $n = $geonames[0];
-
-        $parts = array();
-
-        $location = new Location();
-
-        $parts[] = (string)$n->name;
-
-        if (!empty($n->adminName1)) {
-            $parts[] = (string)$n->adminName1;
-        }
-
-        if (!empty($n->countryName)) {
-            $parts[] = (string)$n->countryName;
-        }
-
-        $location->location_id = (string)$n->geonameId;
-        $location->location_ns = self::LOCATION_NS;
-        $location->lat         = $this->canonical($n->lat);
-        $location->lon         = $this->canonical($n->lng);
-
-        $location->names[$language] = implode(', ', $parts);
-
-        $this->setCache(array('lat' => $lat,
-                              'lon' => $lon),
-                        $location);
-
-        // Success! We handled it, so no further processing
-
-        return false;
-    }
-
-    /**
-     * Human-readable name for a location
-     *
-     * Given a location, we try to retrieve a human-readable name
-     * in the target language.
-     *
-     * @param Location $location Location to get the name for
-     * @param string   $language ISO code for language to find name in
-     * @param string   &$name    Place to put the name
-     *
-     * @return boolean whether to continue
-     */
-
-    function onLocationNameLanguage($location, $language, &$name)
-    {
-        if ($location->location_ns != self::LOCATION_NS) {
-            // It's not one of our IDs... keep processing
-            return true;
-        }
-
-        $id = $location->location_id;
-
-        $n = $this->getCache(array('id' => $id,
-                                   'language' => $language));
-
-        if ($n !== false) {
-            $name = $n;
-            return false;
-        }
-
-        try {
-            $geonames = $this->getGeonames('hierarchy',
-                                           array('geonameId' => $id,
-                                                 'lang' => $language));
-        } catch (Exception $e) {
-            $this->log(LOG_WARNING, "Error for ID $id: " . $e->getMessage());
-            return false;
-        }
-
-        if (count($geonames) == 0) {
-            $this->setCache(array('id' => $id,
-                                  'language' => $language),
-                            null);
-            return false;
-        }
-
-        $parts = array();
-
-        foreach ($geonames as $level) {
-            if (in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
-                $parts[] = (string)$level->name;
-            }
-        }
-
-        $last = $geonames[count($geonames)-1];
-
-        if (!in_array($level->fcode, array('PCLI', 'ADM1', 'PPL'))) {
-            $parts[] = (string)$last->name;
-        }
-
-        if (count($parts)) {
-            $name = implode(', ', array_reverse($parts));
-            $this->setCache(array('id' => $id,
-                                  'language' => $language),
-                            $name);
-        }
-
-        return false;
-    }
-
-    /**
-     * Human-readable URL for a location
-     *
-     * Given a location, we try to retrieve a geonames.org URL.
-     *
-     * @param Location $location Location to get the url for
-     * @param string   &$url     Place to put the url
-     *
-     * @return boolean whether to continue
-     */
-
-    function onLocationUrl($location, &$url)
-    {
-        if ($location->location_ns != self::LOCATION_NS) {
-            // It's not one of our IDs... keep processing
-            return true;
-        }
-
-        $url = 'http://www.geonames.org/' . $location->location_id;
-
-        // it's been filled, so don't process further.
-        return false;
-    }
-
-    /**
-     * Machine-readable name for a location
-     *
-     * Given a location, we try to retrieve a geonames.org URL.
-     *
-     * @param Location $location Location to get the url for
-     * @param string   &$url     Place to put the url
-     *
-     * @return boolean whether to continue
-     */
-
-    function onLocationRdfUrl($location, &$url)
-    {
-        if ($location->location_ns != self::LOCATION_NS) {
-            // It's not one of our IDs... keep processing
-            return true;
-        }
-
-        $url = 'http://sws.geonames.org/' . $location->location_id . '/';
-
-        // it's been filled, so don't process further.
-        return false;
-    }
-
-    function getCache($attrs)
-    {
-        $c = common_memcache();
-
-        if (empty($c)) {
-            return null;
-        }
-
-        $key = $this->cacheKey($attrs);
-
-        $value = $c->get($key);
-
-        return $value;
-    }
-
-    function setCache($attrs, $loc)
-    {
-        $c = common_memcache();
-
-        if (empty($c)) {
-            return null;
-        }
-
-        $key = $this->cacheKey($attrs);
-
-        $result = $c->set($key, $loc, 0, time() + $this->expiry);
-
-        return $result;
-    }
-
-    function cacheKey($attrs)
-    {
-        $key = 'geonames:' .
-               implode(',', array_keys($attrs)) . ':'.
-               common_keyize(implode(',', array_values($attrs)));
-        if ($this->cachePrefix) {
-            return $this->cachePrefix . ':' . $key;
-        } else {
-            return common_cache_key($key);
-        }
-    }
-
-    function wsUrl($method, $params)
-    {
-        if (!empty($this->username)) {
-            $params['username'] = $this->username;
-        }
-
-        if (!empty($this->token)) {
-            $params['token'] = $this->token;
-        }
-
-        $str = http_build_query($params, null, '&');
-
-        return 'http://'.$this->host.'/'.$method.'?'.$str;
-    }
-
-    function getGeonames($method, $params)
-    {
-        if ($this->lastTimeout && (time() - $this->lastTimeout < $this->timeoutWindow)) {
-            throw new Exception("skipping due to recent web service timeout");
-        }
-
-        $client = HTTPClient::start();
-        $client->setConfig('connect_timeout', $this->timeout);
-        $client->setConfig('timeout', $this->timeout);
-
-        try {
-            $result = $client->get($this->wsUrl($method, $params));
-        } catch (Exception $e) {
-            common_log(LOG_ERR, __METHOD__ . ": " . $e->getMessage());
-            $this->lastTimeout = time();
-            throw $e;
-        }
-
-        if (!$result->isOk()) {
-            throw new Exception("HTTP error code " . $result->getStatus());
-        }
-
-        $body = $result->getBody();
-
-        if (empty($body)) {
-            throw new Exception("Empty HTTP body in response");
-        }
-
-        // This will throw an exception if the XML is mal-formed
-
-        $document = new SimpleXMLElement($body);
-
-        // No children, usually no results
-
-        $children = $document->children();
-
-        if (count($children) == 0) {
-            return array();
-        }
-
-        if (isset($document->status)) {
-            throw new Exception("Error #".$document->status['value']." ('".$document->status['message']."')");
-        }
-
-        // Array of elements, >0 elements
-
-        return $document->geoname;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'Geonames',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:Geonames',
-                            'rawdescription' =>
-                            _m('Uses <a href="http://geonames.org/">Geonames</a> service to get human-readable '.
-                               'names for locations based on user-provided lat/long pairs.'));
-        return true;
-    }
-
-    function canonical($coord)
-    {
-        $coord = rtrim($coord, "0");
-        $coord = rtrim($coord, ".");
-
-        return $coord;
-    }
-}
diff --git a/plugins/GoogleAnalytics/GoogleAnalyticsPlugin.php b/plugins/GoogleAnalytics/GoogleAnalyticsPlugin.php
new file mode 100644 (file)
index 0000000..bb937ec
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to use Google Analytics
+ *
+ * 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  Plugin
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2008 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);
+}
+
+/**
+ * Plugin to use Google Analytics
+ *
+ * This plugin will spoot out the correct JavaScript spell to invoke Google Analytics on a page.
+ *
+ * Note that Google Analytics is not compatible with the Franklin Street Statement; consider using
+ * Piwik (http://www.piwik.org/) instead!
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@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/
+ *
+ * @see      Event
+ */
+class GoogleAnalyticsPlugin extends Plugin
+{
+    var $code = null;
+
+    function __construct($code=null)
+    {
+        $this->code = $code;
+        parent::__construct();
+    }
+
+    function onEndShowScripts($action)
+    {
+        $js1 = 'var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");'.
+          'document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));';
+        $js2 = sprintf('try{'.
+                       'var pageTracker = _gat._getTracker("%s");'.
+                       'pageTracker._trackPageview();'.
+                       '} catch(err) {}',
+                       $this->code);
+        $action->inlineScript($js1);
+        $action->inlineScript($js2);
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'GoogleAnalytics',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:GoogleAnalytics',
+                            'rawdescription' =>
+                            _m('Use <a href="http://www.google.com/analytics/">Google Analytics</a>'.
+                               ' to track web access.'));
+        return true;
+    }
+}
diff --git a/plugins/GoogleAnalytics/locale/GoogleAnalytics.pot b/plugins/GoogleAnalytics/locale/GoogleAnalytics.pot
new file mode 100644 (file)
index 0000000..111eee8
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-19 15:29+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: GoogleAnalyticsPlugin.php:80
+msgid ""
+"Use <a href=\"http://www.google.com/analytics/\">Google Analytics</a> to "
+"track web access."
+msgstr ""
diff --git a/plugins/GoogleAnalyticsPlugin.php b/plugins/GoogleAnalyticsPlugin.php
deleted file mode 100644 (file)
index c646bf1..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to use Google Analytics
- *
- * 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  Plugin
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2008 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);
-}
-
-/**
- * Plugin to use Google Analytics
- *
- * This plugin will spoot out the correct JavaScript spell to invoke Google Analytics on a page.
- *
- * Note that Google Analytics is not compatible with the Franklin Street Statement; consider using
- * Piwik (http://www.piwik.org/) instead!
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Evan Prodromou <evan@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/
- *
- * @see      Event
- */
-
-class GoogleAnalyticsPlugin extends Plugin
-{
-    var $code = null;
-
-    function __construct($code=null)
-    {
-        $this->code = $code;
-        parent::__construct();
-    }
-
-    function onEndShowScripts($action)
-    {
-        $js1 = 'var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");'.
-          'document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));';
-        $js2 = sprintf('try{'.
-                       'var pageTracker = _gat._getTracker("%s");'.
-                       'pageTracker._trackPageview();'.
-                       '} catch(err) {}',
-                       $this->code);
-        $action->inlineScript($js1);
-        $action->inlineScript($js2);
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'GoogleAnalytics',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:GoogleAnalytics',
-                            'rawdescription' =>
-                            _m('Use <a href="http://www.google.com/analytics/">Google Analytics</a>'.
-                               ' to track Web access.'));
-        return true;
-    }
-}
index 8a9721ea90daa6b89e7eb9a4006470bcdf68f58d..dd8ff7217615e8138ee55a5623fa04126de75868 100644 (file)
@@ -34,17 +34,17 @@ class GravatarPlugin extends Plugin
     {
         return true;
     }
-    
+
     function onStartAvatarFormData($action)
     {
         $user = common_current_user();
         $hasGravatar = $this->hasGravatar($user->id);
-        
+
         if($hasGravatar) {
             return false;
         }
     }
-    
+
     function onEndAvatarFormData($action)
     {
         $user = common_current_user();
@@ -91,7 +91,7 @@ class GravatarPlugin extends Plugin
                              _m('To use a Gravatar first enter in an email address.'));
         }
     }
-    
+
     function onStartAvatarSaveForm($action)
     {
         if ($action->arg('add')) {
@@ -131,19 +131,18 @@ class GravatarPlugin extends Plugin
         }
         return false;
      }
 
     function gravatar_save()
     {
         $cur = common_current_user();
-        
+
         if(empty($cur->email)) {
-            return array('message' => _m('You do not have a email set in your profile.'),
+            return array('message' => _m('You do not have an email address set in your profile.'),
                          'success' => false);
         }
         //Get rid of previous Avatar
         $this->gravatar_remove();
-        
+
         foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
             $gravatar = new Avatar();
             $gravatar->profile_id = $cur->id;
@@ -156,7 +155,7 @@ class GravatarPlugin extends Plugin
             $gravatar->created = DB_DataObject_Cast::dateTime(); # current time
 
             if (!$gravatar->insert()) {
-                return array('message' => _m('Failed to save Gravatar to the DB.'),
+                return array('message' => _m('Failed to save Gravatar to the database.'),
                              'success' => false);
             }
         }
@@ -181,7 +180,7 @@ class GravatarPlugin extends Plugin
         return array('message' => _m('Gravatar removed.'),
                      'success' => true);
     }
+
     function gravatar_url($email, $size)
     {
         $url = "http://www.gravatar.com/avatar.php?gravatar_id=".
@@ -202,4 +201,4 @@ class GravatarPlugin extends Plugin
 
         return true;
     }
-}
\ No newline at end of file
+}
index 9337e24a0aee7b1bbdbb56ca5e83656e21758acf..2639048089be8e621a7c6b1cb549988487aa7fbb 100644 (file)
@@ -10,4 +10,4 @@ addPlugin('Gravatar', array());
 ToDo:
 Site default all on for gravatar by default
 Migration Script
-Localize
\ No newline at end of file
+Localize
index 9a71b81663aa24642a2b59befe4f805e0aeeb692..fda09b7975f5adafd4f597bef934b820e3f462bd 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -45,11 +45,11 @@ msgid "To use a Gravatar first enter in an email address."
 msgstr ""
 
 #: GravatarPlugin.php:141
-msgid "You do not have a email set in your profile."
+msgid "You do not have an email address set in your profile."
 msgstr ""
 
 #: GravatarPlugin.php:159
-msgid "Failed to save Gravatar to the DB."
+msgid "Failed to save Gravatar to the database."
 msgstr ""
 
 #: GravatarPlugin.php:163
index 66be799d3edc02148f88d8e97be326cfce995b1d..1661ed86eaafc012629c7476c83606105823a21e 100644 (file)
@@ -51,16 +51,16 @@ class ImapPlugin extends Plugin
 
     function initialize(){
         if(!isset($this->mailbox)){
-            throw new Exception("must specify a mailbox");
+            throw new Exception(_m("A mailbox must be specified."));
         }
         if(!isset($this->user)){
-            throw new Exception("must specify a user");
+            throw new Exception(_m("A user must be specified.");
         }
         if(!isset($this->password)){
-            throw new Exception("must specify a password");
+            throw new Exception(_m("A password must be specified."));
         }
         if(!isset($this->poll_frequency)){
-            throw new Exception("must specify a poll_frequency");
+            throw new Exception(_m("A poll_frequency must be specified."));
         }
 
         return true;
index 0bbd42e78f023deec1d45443848fbd21e1a6ef07..e2f8c6d5431f829dd6153d03c95f04145669e5d3 100644 (file)
@@ -44,7 +44,7 @@ class ImapManager extends IoManager
      */
     public static function get()
     {
-        throw new Exception('ImapManager should be created using it\'s constructor, not the static get method');
+        throw new Exception(_m('ImapManager should be created using its constructor, not the using the static get method.'));
     }
 
     /**
@@ -92,12 +92,12 @@ class ImapManager extends IoManager
     {
         return $this->check_mailbox() > 0;
     }
-    
+
     function pollInterval()
     {
         return $this->plugin->poll_frequency;
     }
-    
+
     protected function connect()
     {
         $this->conn = imap_open($this->plugin->mailbox, $this->plugin->user, $this->plugin->password);
index 9d807a3d351eff944a86444cfad9e8a8f7cb4405..1f7497446a8f3352d35a15297bd216d54ff4cd77 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+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"
@@ -20,6 +20,22 @@ msgstr ""
 msgid "Error"
 msgstr ""
 
+#: ImapPlugin.php:54
+msgid "A mailbox must be specified."
+msgstr ""
+
+#: ImapPlugin.php:57
+msgid "A user must be specified."
+msgstr ""
+
+#: ImapPlugin.php:60
+msgid "A password must be specified."
+msgstr ""
+
+#: ImapPlugin.php:63
+msgid "A poll_frequency must be specified."
+msgstr ""
+
 #: ImapPlugin.php:103
 msgid ""
 "The IMAP plugin allows for StatusNet to check a POP or IMAP mailbox for "
index 52f9ef1eaa31cc4b1f121a54cf8d7889b512d9a7..b1af9664f63869b4561de61391296443944dc195 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index ce84cbf0e040f089a534b3084e1cf7ce5c7b83dc..d40dd5ebd81db8638c895ab6368f4f8c97e64549 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index 11e7fc5c822fc6543553ae7984bc6bcca60817bb..60a7106f9740fd16f0dbfdff85b7587fde5d7fb6 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+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"
index 1f1647a75306581b03863b247e11663c29580566..7dea1f0ed420e1c282f8d433a42666071200b304 100644 (file)
@@ -60,13 +60,13 @@ class LdapCommon
         $this->ldap_config = $this->get_ldap_config();
 
         if(!isset($this->host)){
-            throw new Exception("must specify a host");
+            throw new Exception(_m("A host must be specified."));
         }
         if(!isset($this->basedn)){
-            throw new Exception("must specify a basedn");
+            throw new Exception(_m('"basedn" must be specified.'));
         }
         if(!isset($this->attributes['username'])){
-            throw new Exception("username attribute must be set.");
+            throw new Exception(_m('The username attribute must be set.'));
         }
     }
 
@@ -173,7 +173,7 @@ class LdapCommon
                 $ldap = $this->get_ldap_connection($config);
 
                 $entry = $this->get_user($username,array(),$ldap);
-                
+
                 $newCryptedPassword = $this->hashPassword($newpassword, $this->password_encoding);
                 if ($newCryptedPassword===false) {
                     return false;
@@ -254,15 +254,14 @@ class LdapCommon
      * @return string The hashed password.
      *
      */
-
-    function hashPassword( $passwordClear, $encodageType ) 
+    function hashPassword( $passwordClear, $encodageType )
     {
         $encodageType = strtolower( $encodageType );
         switch( $encodageType ) {
-            case 'crypt': 
-                $cryptedPassword = '{CRYPT}' . crypt($passwordClear,$this->randomSalt(2)); 
+            case 'crypt':
+                $cryptedPassword = '{CRYPT}' . crypt($passwordClear,$this->randomSalt(2));
                 break;
-                
+
             case 'ext_des':
                 // extended des crypt. see OpenBSD crypt man page.
                 if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) {return FALSE;} //Your system crypt library does not support extended DES encryption.
@@ -345,8 +344,7 @@ class LdapCommon
      * @param int $length The length of the salt string to generate.
      * @return string The generated salt string.
      */
-     
-    function randomSalt( $length ) 
+    function randomSalt( $length )
     {
         $possible = '0123456789'.
             'abcdefghijklmnopqrstuvwxyz'.
@@ -360,10 +358,8 @@ class LdapCommon
 
         return $str;
     }
-
 }
 
 class LdapInvalidCredentialsException extends Exception
 {
-
 }
index 4ee2e8e16ae2be99973deff8f7e14b2aa423c7db..960164fd31d058d4814571b160bfa316200b498b 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** 
+/**
  * StatusNet, the distributed open-source microblogging tool
  *
  * Cache the LDAP schema in memcache to improve performance
@@ -32,14 +32,14 @@ class MemcacheSchemaCache implements Net_LDAP2_SchemaCache
     protected $cacheKey;
 
     /**
-    * Initialize the simple cache
-    *
-    * Config is as following:
-    *  memcache     memcache instance
-    *  cachekey  the key in the cache to look at
-    *
-    * @param array $cfg Config array
-    */
+     * Initialize the simple cache
+     *
+     * Config is as following:
+     *  memcache     memcache instance
+     *  cachekey  the key in the cache to look at
+     *
+     * @param array $cfg Config array
+     */
     public function MemcacheSchemaCache($cfg)
     {
         $this->c = $cfg['c'];
@@ -57,18 +57,18 @@ class MemcacheSchemaCache implements Net_LDAP2_SchemaCache
     }
 
     /**
-    * Store a schema object in the cache
-    *
-    * This method will be called, if Net_LDAP2 has fetched a fresh
-    * schema object from LDAP and wants to init or refresh the cache.
-    *
-    * To invalidate the cache and cause Net_LDAP2 to refresh the cache,
-    * you can call this method with null or false as value.
-    * The next call to $ldap->schema() will then refresh the caches object.
-    *
-    * @param mixed $schema The object that should be cached
-    * @return true|Net_LDAP2_Error|false
-    */
+     * Store a schema object in the cache
+     *
+     * This method will be called, if Net_LDAP2 has fetched a fresh
+     * schema object from LDAP and wants to init or refresh the cache.
+     *
+     * To invalidate the cache and cause Net_LDAP2 to refresh the cache,
+     * you can call this method with null or false as value.
+     * The next call to $ldap->schema() will then refresh the caches object.
+     *
+     * @param mixed $schema The object that should be cached
+     * @return true|Net_LDAP2_Error|false
+     */
     public function storeSchema($schema) {
         return $this->c->set($this->cacheKey, $schema);
     }
index 1c3d6f84b3446724fe17d8896f5c21d2e4382733..bd98026fe821cb660a35b25eb02a1c185ea04b69 100644 (file)
@@ -40,7 +40,7 @@ class LilUrlPlugin extends UrlShortenerPlugin
     function onInitializePlugin(){
         parent::onInitializePlugin();
         if(!isset($this->serviceUrl)){
-            throw new Exception("must specify a serviceUrl");
+            throw new Exception(_m('A serviceUrl must be specified.'));
         }
     }
 
@@ -71,4 +71,3 @@ class LilUrlPlugin extends UrlShortenerPlugin
         return true;
     }
 }
-
index 2785ee8005dfc73d5e2c269cee887202494b9a78..66505e5f824cec381fa9a7afaca5564ab9d84773 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
diff --git a/plugins/Linkback/LinkbackPlugin.php b/plugins/Linkback/LinkbackPlugin.php
new file mode 100644 (file)
index 0000000..797572d
--- /dev/null
@@ -0,0 +1,247 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to do linkbacks for notices containing links
+ *
+ * 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  Plugin
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+require_once('Auth/Yadis/Yadis.php');
+
+define('LINKBACKPLUGIN_VERSION', '0.1');
+
+/**
+ * Plugin to do linkbacks for notices containing URLs
+ *
+ * After new notices are saved, we check their text for URLs. If there
+ * are URLs, we test each URL to see if it supports any
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@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/
+ *
+ * @see      Event
+ */
+class LinkbackPlugin extends Plugin
+{
+    var $notice = null;
+
+    function __construct()
+    {
+        parent::__construct();
+    }
+
+    function onHandleQueuedNotice($notice)
+    {
+        if ($notice->is_local == 1) {
+            // Try to avoid actually mucking with the
+            // notice content
+            $c = $notice->content;
+            $this->notice = $notice;
+            // Ignoring results
+            common_replace_urls_callback($c,
+                                         array($this, 'linkbackUrl'));
+        }
+        return true;
+    }
+
+    function linkbackUrl($url)
+    {
+        common_log(LOG_DEBUG,"Attempting linkback for " . $url);
+
+        $orig = $url;
+        $url = htmlspecialchars_decode($orig);
+        $scheme = parse_url($url, PHP_URL_SCHEME);
+        if (!in_array($scheme, array('http', 'https'))) {
+            return $orig;
+        }
+
+        // XXX: Do a HEAD first to save some time/bandwidth
+
+        $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+
+        $result = $fetcher->get($url,
+                                array('User-Agent: ' . $this->userAgent(),
+                                      'Accept: application/html+xml,text/html'));
+
+        if (!in_array($result->status, array('200', '206'))) {
+            return $orig;
+        }
+
+        $pb = null;
+        $tb = null;
+
+        if (array_key_exists('X-Pingback', $result->headers)) {
+            $pb = $result->headers['X-Pingback'];
+        } else if (preg_match('/<link rel="pingback" href="([^"]+)" ?\/?>/',
+                              $result->body,
+                              $match)) {
+            $pb = $match[1];
+        }
+
+        if (!empty($pb)) {
+            $this->pingback($result->final_url, $pb);
+        } else {
+            $tb = $this->getTrackback($result->body, $result->final_url);
+            if (!empty($tb)) {
+                $this->trackback($result->final_url, $tb);
+            }
+        }
+
+        return $orig;
+    }
+
+    function pingback($url, $endpoint)
+    {
+        $args = array($this->notice->uri, $url);
+
+        if (!extension_loaded('xmlrpc')) {
+            if (!dl('xmlrpc.so')) {
+                common_log(LOG_ERR, "Can't pingback; xmlrpc extension not available.");
+                return;
+            }
+        }
+
+        $request = HTTPClient::start();
+        try {
+            $response = $request->post($endpoint,
+                array('Content-Type: text/xml'),
+                xmlrpc_encode_request('pingback.ping', $args));
+            $response = xmlrpc_decode($response->getBody());
+            if (xmlrpc_is_fault($response)) {
+                common_log(LOG_WARNING,
+                       "Pingback error for '$url' ($endpoint): ".
+                       "$response[faultString] ($response[faultCode])");
+            } else {
+                common_log(LOG_INFO,
+                       "Pingback success for '$url' ($endpoint): ".
+                       "'$response'");
+            }
+        } catch (HTTP_Request2_Exception $e) {
+            common_log(LOG_WARNING,
+                   "Pingback request failed for '$url' ($endpoint)");
+        }
+    }
+
+    // Largely cadged from trackback_cls.php by
+    // Ran Aroussi <ran@blogish.org>, GPL2 or any later version
+    // http://phptrackback.sourceforge.net/
+    function getTrackback($text, $url)
+    {
+        if (preg_match_all('/(<rdf:RDF.*?<\/rdf:RDF>)/sm', $text, $match, PREG_SET_ORDER)) {
+            for ($i = 0; $i < count($match); $i++) {
+                if (preg_match('|dc:identifier="' . preg_quote($url) . '"|ms', $match[$i][1])) {
+                    $rdf_array[] = trim($match[$i][1]);
+                }
+            }
+
+            // Loop through the RDFs array and extract trackback URIs
+
+            $tb_array = array(); // <- holds list of trackback URIs
+
+            if (!empty($rdf_array)) {
+
+                for ($i = 0; $i < count($rdf_array); $i++) {
+                    if (preg_match('/trackback:ping="([^"]+)"/', $rdf_array[$i], $array)) {
+                        $tb_array[] = trim($array[1]);
+                        break;
+                    }
+                }
+            }
+
+            // Return Trackbacks
+
+            if (empty($tb_array)) {
+                return null;
+            } else {
+                return $tb_array[0];
+            }
+        }
+
+        if (preg_match_all('/(<a[^>]*?rel=[\'"]trackback[\'"][^>]*?>)/', $text, $match)) {
+            foreach ($match[1] as $atag) {
+                if (preg_match('/href=[\'"]([^\'"]*?)[\'"]/', $atag, $url)) {
+                    return $url[1];
+                }
+            }
+        }
+
+        return null;
+
+    }
+
+    function trackback($url, $endpoint)
+    {
+        $profile = $this->notice->getProfile();
+
+        $args = array('title' => sprintf(_('%1$s\'s status on %2$s'),
+                                         $profile->nickname,
+                                         common_exact_date($this->notice->created)),
+                      'excerpt' => $this->notice->content,
+                      'url' => $this->notice->uri,
+                      'blog_name' => $profile->nickname);
+
+        $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+
+        $result = $fetcher->post($endpoint,
+                                 http_build_query($args),
+                                 array('User-Agent: ' . $this->userAgent()));
+
+        if ($result->status != '200') {
+            common_log(LOG_WARNING,
+                       "Trackback error for '$url' ($endpoint): ".
+                       "$result->body");
+        } else {
+            common_log(LOG_INFO,
+                       "Trackback success for '$url' ($endpoint): ".
+                       "'$result->body'");
+        }
+    }
+
+    function userAgent()
+    {
+        return 'LinkbackPlugin/'.LINKBACKPLUGIN_VERSION .
+          ' StatusNet/' . STATUSNET_VERSION;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Linkback',
+                            'version' => LINKBACKPLUGIN_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:Linkback',
+                            'rawdescription' =>
+                            _m('Notify blog authors when their posts have been linked in '.
+                               'microblog notices using '.
+                               '<a href="http://www.hixie.ch/specs/pingback/pingback">Pingback</a> '.
+                               'or <a href="http://www.movabletype.org/docs/mttrackback.html">Trackback</a> protocols.'));
+        return true;
+    }
+}
diff --git a/plugins/Linkback/locale/Linkback.pot b/plugins/Linkback/locale/Linkback.pot
new file mode 100644 (file)
index 0000000..f97eccd
--- /dev/null
@@ -0,0 +1,25 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: LinkbackPlugin.php:243
+msgid ""
+"Notify blog authors when their posts have been linked in microblog notices "
+"using <a href=\"http://www.hixie.ch/specs/pingback/pingback\">Pingback</a> "
+"or <a href=\"http://www.movabletype.org/docs/mttrackback.html\">Trackback</"
+"a> protocols."
+msgstr ""
diff --git a/plugins/LinkbackPlugin.php b/plugins/LinkbackPlugin.php
deleted file mode 100644 (file)
index 8e44bea..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to do linkbacks for notices containing links
- *
- * 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  Plugin
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-require_once('Auth/Yadis/Yadis.php');
-
-define('LINKBACKPLUGIN_VERSION', '0.1');
-
-/**
- * Plugin to do linkbacks for notices containing URLs
- *
- * After new notices are saved, we check their text for URLs. If there
- * are URLs, we test each URL to see if it supports any
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Evan Prodromou <evan@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/
- *
- * @see      Event
- */
-
-class LinkbackPlugin extends Plugin
-{
-    var $notice = null;
-
-    function __construct()
-    {
-        parent::__construct();
-    }
-
-    function onHandleQueuedNotice($notice)
-    {
-        if ($notice->is_local == 1) {
-            // Try to avoid actually mucking with the
-            // notice content
-            $c = $notice->content;
-            $this->notice = $notice;
-            // Ignoring results
-            common_replace_urls_callback($c,
-                                         array($this, 'linkbackUrl'));
-        }
-        return true;
-    }
-
-    function linkbackUrl($url)
-    {
-        common_log(LOG_DEBUG,"Attempting linkback for " . $url);
-
-        $orig = $url;
-        $url = htmlspecialchars_decode($orig);
-        $scheme = parse_url($url, PHP_URL_SCHEME);
-        if (!in_array($scheme, array('http', 'https'))) {
-            return $orig;
-        }
-
-        // XXX: Do a HEAD first to save some time/bandwidth
-
-        $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
-
-        $result = $fetcher->get($url,
-                                array('User-Agent: ' . $this->userAgent(),
-                                      'Accept: application/html+xml,text/html'));
-
-        if (!in_array($result->status, array('200', '206'))) {
-            return $orig;
-        }
-
-        $pb = null;
-        $tb = null;
-
-        if (array_key_exists('X-Pingback', $result->headers)) {
-            $pb = $result->headers['X-Pingback'];
-        } else if (preg_match('/<link rel="pingback" href="([^"]+)" ?\/?>/',
-                              $result->body,
-                              $match)) {
-            $pb = $match[1];
-        }
-
-        if (!empty($pb)) {
-            $this->pingback($result->final_url, $pb);
-        } else {
-            $tb = $this->getTrackback($result->body, $result->final_url);
-            if (!empty($tb)) {
-                $this->trackback($result->final_url, $tb);
-            }
-        }
-
-        return $orig;
-    }
-
-    function pingback($url, $endpoint)
-    {
-        $args = array($this->notice->uri, $url);
-
-        if (!extension_loaded('xmlrpc')) {
-            if (!dl('xmlrpc.so')) {
-                common_log(LOG_ERR, "Can't pingback; xmlrpc extension not available.");
-                return;
-            }
-        }
-
-        $request = HTTPClient::start();
-        try {
-            $response = $request->post($endpoint,
-                array('Content-Type: text/xml'),
-                xmlrpc_encode_request('pingback.ping', $args));
-            $response = xmlrpc_decode($response->getBody());
-            if (xmlrpc_is_fault($response)) {
-                common_log(LOG_WARNING,
-                       "Pingback error for '$url' ($endpoint): ".
-                       "$response[faultString] ($response[faultCode])");
-            } else {
-                common_log(LOG_INFO,
-                       "Pingback success for '$url' ($endpoint): ".
-                       "'$response'");
-            }
-        } catch (HTTP_Request2_Exception $e) {
-            common_log(LOG_WARNING,
-                   "Pingback request failed for '$url' ($endpoint)");
-        }
-    }
-
-    // Largely cadged from trackback_cls.php by
-    // Ran Aroussi <ran@blogish.org>, GPL2 or any later version
-    // http://phptrackback.sourceforge.net/
-
-    function getTrackback($text, $url)
-    {
-        if (preg_match_all('/(<rdf:RDF.*?<\/rdf:RDF>)/sm', $text, $match, PREG_SET_ORDER)) {
-            for ($i = 0; $i < count($match); $i++) {
-                if (preg_match('|dc:identifier="' . preg_quote($url) . '"|ms', $match[$i][1])) {
-                    $rdf_array[] = trim($match[$i][1]);
-                }
-            }
-
-            // Loop through the RDFs array and extract trackback URIs
-
-            $tb_array = array(); // <- holds list of trackback URIs
-
-            if (!empty($rdf_array)) {
-
-                for ($i = 0; $i < count($rdf_array); $i++) {
-                    if (preg_match('/trackback:ping="([^"]+)"/', $rdf_array[$i], $array)) {
-                        $tb_array[] = trim($array[1]);
-                        break;
-                    }
-                }
-            }
-
-            // Return Trackbacks
-
-            if (empty($tb_array)) {
-                return null;
-            } else {
-                return $tb_array[0];
-            }
-        }
-
-        if (preg_match_all('/(<a[^>]*?rel=[\'"]trackback[\'"][^>]*?>)/', $text, $match)) {
-            foreach ($match[1] as $atag) {
-                if (preg_match('/href=[\'"]([^\'"]*?)[\'"]/', $atag, $url)) {
-                    return $url[1];
-                }
-            }
-        }
-
-        return null;
-
-    }
-
-    function trackback($url, $endpoint)
-    {
-        $profile = $this->notice->getProfile();
-
-        $args = array('title' => sprintf(_('%1$s\'s status on %2$s'),
-                                         $profile->nickname,
-                                         common_exact_date($this->notice->created)),
-                      'excerpt' => $this->notice->content,
-                      'url' => $this->notice->uri,
-                      'blog_name' => $profile->nickname);
-
-        $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
-
-        $result = $fetcher->post($endpoint,
-                                 http_build_query($args),
-                                 array('User-Agent: ' . $this->userAgent()));
-
-        if ($result->status != '200') {
-            common_log(LOG_WARNING,
-                       "Trackback error for '$url' ($endpoint): ".
-                       "$result->body");
-        } else {
-            common_log(LOG_INFO,
-                       "Trackback success for '$url' ($endpoint): ".
-                       "'$result->body'");
-        }
-    }
-
-    function userAgent()
-    {
-        return 'LinkbackPlugin/'.LINKBACKPLUGIN_VERSION .
-          ' StatusNet/' . STATUSNET_VERSION;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'Linkback',
-                            'version' => LINKBACKPLUGIN_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:Linkback',
-                            'rawdescription' =>
-                            _m('Notify blog authors when their posts have been linked in '.
-                               'microblog notices using '.
-                               '<a href="http://www.hixie.ch/specs/pingback/pingback">Pingback</a> '.
-                               'or <a href="http://www.movabletype.org/docs/mttrackback.html">Trackback</a> protocols.'));
-        return true;
-    }
-}
index e7240a64497adbe749b48c35cb0c99f2dc6bd923..c4ba6464eaa1077e5ca81b8e2fb65439d2f5d782 100644 (file)
@@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
  *
  * @seeAlso  Location
  */
-
 class MapstractionPlugin extends Plugin
 {
     const VERSION = STATUSNET_VERSION;
@@ -64,7 +63,6 @@ class MapstractionPlugin extends Plugin
      *
      * @return boolean event handler return
      */
-
     function onRouterInitialized($m)
     {
         $m->connect(':nickname/all/map',
@@ -85,7 +83,6 @@ class MapstractionPlugin extends Plugin
      *
      * @return boolean event handler return
      */
-
     function onAutoload($cls)
     {
         switch ($cls)
@@ -109,7 +106,6 @@ class MapstractionPlugin extends Plugin
      *
      * @return boolean event handler return
      */
-
     function onEndShowScripts($action)
     {
         $actionName = $action->trimmed('action');
@@ -190,6 +186,7 @@ class MapstractionPlugin extends Plugin
                                     array('nickname' => $action->trimmed('nickname')));
 
         $action->element('a', array('href' => $mapUrl),
+                         // TRANS: Clickable item to allow opening the map in full size.
                          _m("Full size"));
 
         $action->elementEnd('div');
@@ -203,8 +200,7 @@ class MapstractionPlugin extends Plugin
                             'homepage' => 'http://status.net/wiki/Plugin:Mapstraction',
                             'rawdescription' =>
                             _m('Show maps of users\' and friends\' notices '.
-                               'with <a href="http://www.mapstraction.com/">Mapstraction</a> '.
-                               'JavaScript library.'));
+                               'with <a href="http://www.mapstraction.com/">Mapstraction</a>.'));
         return true;
     }
 }
index 5dab670e26da8b49baa3e1fb40b819b1c3fdeb57..fa05ccc7ae30db7e6567b93244d57e5bcf21f633 100644 (file)
@@ -42,7 +42,6 @@ if (!defined('STATUSNET')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class AllmapAction extends MapAction
 {
     function prepare($args)
@@ -63,16 +62,22 @@ class AllmapAction extends MapAction
     function title()
     {
         if (!empty($this->profile->fullname)) {
+            // @todo FIXME: Bad i18n. Should be "%1$s (%2$s)".
             $base = $this->profile->fullname . ' (' . $this->user->nickname . ') ';
         } else {
             $base = $this->user->nickname;
         }
 
         if ($this->page == 1) {
+            // TRANS: Page title.
+            // TRANS: %s is a user nickname.
             return sprintf(_m("%s friends map"),
                            $base);
         } else {
-            return sprintf(_m("%s friends map, page %d"),
+            // @todo CHECKME: does this even happen? May not be needed.
+            // TRANS: Page title.
+            // TRANS: %1$s is a user nickname, %2$d is a page number.
+            return sprintf(_m("%1$s friends map, page %2$d"),
                            $base,
                            $this->page);
         }
index 3d7f71f89b1c8199b27fceaa4d29abe888887570..7a971cabed40e73926417014ba59612a73b3b603 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,39 +16,37 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: MapstractionPlugin.php:182
+#: MapstractionPlugin.php:178
 msgid "Map"
 msgstr ""
 
-#: MapstractionPlugin.php:193
+#. TRANS: Clickable item to allow opening the map in full size.
+#: MapstractionPlugin.php:190
 msgid "Full size"
 msgstr ""
 
-#: MapstractionPlugin.php:205
+#: MapstractionPlugin.php:202
 msgid ""
 "Show maps of users' and friends' notices with <a href=\"http://www."
-"mapstraction.com/\">Mapstraction</a> JavaScript library."
+"mapstraction.com/\">Mapstraction</a>."
 msgstr ""
 
-#: map.php:73
+#: map.php:72
 msgid "No such user."
 msgstr ""
 
-#: map.php:80
+#: map.php:79
 msgid "User has no profile."
 msgstr ""
 
-#: allmap.php:72
+#. TRANS: Page title.
+#. TRANS: %s is a user nickname.
+#: allmap.php:74
 #, php-format
 msgid "%s friends map"
 msgstr ""
 
-#: allmap.php:75
-#, php-format
-msgid "%s friends map, page %d"
-msgstr ""
-
-#: usermap.php:72
+#: usermap.php:73
 #, php-format
 msgid "%s map, page %d"
 msgstr ""
index 7dab8e10a9bd0b154e69976275fdbb291f56847c..50ff82b67ef2b806f754e6ff08c8ee6803587ece 100644 (file)
@@ -42,7 +42,6 @@ if (!defined('STATUSNET')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class MapAction extends OwnerDesignAction
 {
     var $profile = null;
@@ -116,7 +115,6 @@ class MapAction extends OwnerDesignAction
      *
      * @return boolean event handler return
      */
-
     function showScripts()
     {
         parent::showScripts();
index 094334f6056f0d51e3ef69626827e9885b46042e..0ee956159c92f8fa95de398ac7d826547e9a773b 100644 (file)
@@ -42,10 +42,8 @@ if (!defined('STATUSNET')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class UsermapAction extends MapAction
 {
-
     function prepare($args)
     {
         if(parent::prepare($args)) {
@@ -61,14 +59,17 @@ class UsermapAction extends MapAction
     function title()
     {
         if (!empty($this->profile->fullname)) {
-            $base = $this->profile->fullname . ' (' . $this->user->nickname . ') ';
+            // @todo FIXME: Bad i18n. Should be '%1$s (%2$s)'
+            $base = $this->profile->fullname . ' (' . $this->user->nickname . ')';
         } else {
             $base = $this->user->nickname;
         }
 
         if ($this->page == 1) {
+            // @todo CHECKME: inconsisten with paged variant below. " map" missing.
             return $base;
         } else {
+            // @todo CHECKME: Is the part ", page %2$d" relevant here?
             return sprintf(_m("%s map, page %d"),
                            $base,
                            $this->page);
diff --git a/plugins/Memcache/MemcachePlugin.php b/plugins/Memcache/MemcachePlugin.php
new file mode 100644 (file)
index 0000000..f0c473c
--- /dev/null
@@ -0,0 +1,249 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Plugin to implement cache interface for memcache
+ *
+ * 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/>.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * A plugin to use memcache for the cache interface
+ *
+ * This used to be encoded as config-variable options in the core code;
+ * it's now broken out to a separate plugin. The same interface can be
+ * implemented by other plugins.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+class MemcachePlugin extends Plugin
+{
+    static $cacheInitialized = false;
+
+    private $_conn  = null;
+    public $servers = array('127.0.0.1;11211');
+
+    public $compressThreshold = 20480;
+    public $compressMinSaving = 0.2;
+
+    public $persistent = null;
+
+    public $defaultExpiry = 86400; // 24h
+
+    /**
+     * Initialize the plugin
+     *
+     * Note that onStartCacheGet() may have been called before this!
+     *
+     * @return boolean flag value
+     */
+    function onInitializePlugin()
+    {
+        if (self::$cacheInitialized) {
+            $this->persistent = true;
+        } else {
+            // If we're a parent command-line process we need
+            // to be able to close out the connection after
+            // forking, so disable persistence.
+            //
+            // We'll turn it back on again the second time
+            // through which will either be in a child process,
+            // or a single-process script which is switching
+            // configurations.
+            $this->persistent = (php_sapi_name() == 'cli') ? false : true;
+        }
+        $this->_ensureConn();
+        self::$cacheInitialized = true;
+        return true;
+    }
+
+    /**
+     * Get a value associated with a key
+     *
+     * The value should have been set previously.
+     *
+     * @param string &$key   in; Lookup key
+     * @param mixed  &$value out; value associated with key
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheGet(&$key, &$value)
+    {
+        $this->_ensureConn();
+        $value = $this->_conn->get($key);
+        Event::handle('EndCacheGet', array($key, &$value));
+        return false;
+    }
+
+    /**
+     * Associate a value with a key
+     *
+     * @param string  &$key     in; Key to use for lookups
+     * @param mixed   &$value   in; Value to associate
+     * @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
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
+    {
+        $this->_ensureConn();
+        if ($expiry === null) {
+            $expiry = $this->defaultExpiry;
+        }
+        $success = $this->_conn->set($key, $value, $this->flag(intval($flag)), $expiry);
+        Event::handle('EndCacheSet', array($key, $value, $flag,
+                                           $expiry));
+        return false;
+    }
+
+    /**
+     * Atomically increment an existing numeric key value.
+     * Existing expiration time will not be changed.
+     *
+     * @param string &$key    in; Key to use for lookups
+     * @param int    &$step   in; Amount to increment (default 1)
+     * @param mixed  &$value  out; Incremented value, or false if key not set.
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheIncrement(&$key, &$step, &$value)
+    {
+        $this->_ensureConn();
+        $value = $this->_conn->increment($key, $step);
+        Event::handle('EndCacheIncrement', array($key, $step, $value));
+        return false;
+    }
+
+    /**
+     * Delete a value associated with a key
+     *
+     * @param string  &$key     in; Key to lookup
+     * @param boolean &$success out; whether it worked
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheDelete(&$key, &$success)
+    {
+        $this->_ensureConn();
+        $success = $this->_conn->delete($key);
+        Event::handle('EndCacheDelete', array($key));
+        return false;
+    }
+
+    function onStartCacheReconnect(&$success)
+    {
+        if (empty($this->_conn)) {
+            // nothing to do
+            return true;
+        }
+        if ($this->persistent) {
+            common_log(LOG_ERR, "Cannot close persistent memcached connection");
+            $success = false;
+        } else {
+            common_log(LOG_INFO, "Closing memcached connection");
+            $success = $this->_conn->close();
+            $this->_conn = null;
+        }
+        return false;
+    }
+
+    /**
+     * Ensure that a connection exists
+     *
+     * Checks the instance $_conn variable and connects
+     * if it is empty.
+     *
+     * @return void
+     */
+    private function _ensureConn()
+    {
+        if (empty($this->_conn)) {
+            $this->_conn = new Memcache();
+
+            if (is_array($this->servers)) {
+                $servers = $this->servers;
+            } else {
+                $servers = array($this->servers);
+            }
+            foreach ($servers as $server) {
+                if (strpos($server, ';') !== false) {
+                    list($host, $port) = explode(';', $server);
+                } else {
+                    $host = $server;
+                    $port = 11211;
+                }
+
+                $this->_conn->addServer($host, $port, $this->persistent);
+            }
+
+            // Compress items stored in the cache if they're over threshold in size
+            // (default 2KiB) and the compression would save more than min savings
+            // ratio (default 0.2).
+
+            // Allows the cache to store objects larger than 1MB (if they
+            // compress to less than 1MB), and improves cache memory efficiency.
+
+            $this->_conn->setCompressThreshold($this->compressThreshold,
+                                               $this->compressMinSaving);
+        }
+    }
+
+    /**
+     * 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',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou, Craig Andrews',
+                            'homepage' => 'http://status.net/wiki/Plugin:Memcache',
+                            'rawdescription' =>
+                            _m('Use <a href="http://memcached.org/">Memcached</a> to cache query results.'));
+        return true;
+    }
+}
diff --git a/plugins/Memcache/locale/Memcache.pot b/plugins/Memcache/locale/Memcache.pot
new file mode 100644 (file)
index 0000000..cba1fe7
--- /dev/null
@@ -0,0 +1,22 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: MemcachePlugin.php:252
+msgid ""
+"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results."
+msgstr ""
diff --git a/plugins/MemcachePlugin.php b/plugins/MemcachePlugin.php
deleted file mode 100644 (file)
index c3ca5c1..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Plugin to implement cache interface for memcache
- *
- * 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/>.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * A plugin to use memcache for the cache interface
- *
- * This used to be encoded as config-variable options in the core code;
- * it's now broken out to a separate plugin. The same interface can be
- * implemented by other plugins.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-class MemcachePlugin extends Plugin
-{
-    static $cacheInitialized = false;
-
-    private $_conn  = null;
-    public $servers = array('127.0.0.1;11211');
-
-    public $compressThreshold = 20480;
-    public $compressMinSaving = 0.2;
-
-    public $persistent = null;
-
-    public $defaultExpiry = 86400; // 24h
-
-    /**
-     * Initialize the plugin
-     *
-     * Note that onStartCacheGet() may have been called before this!
-     *
-     * @return boolean flag value
-     */
-
-    function onInitializePlugin()
-    {
-        if (self::$cacheInitialized) {
-            $this->persistent = true;
-        } else {
-            // If we're a parent command-line process we need
-            // to be able to close out the connection after
-            // forking, so disable persistence.
-            //
-            // We'll turn it back on again the second time
-            // through which will either be in a child process,
-            // or a single-process script which is switching
-            // configurations.
-            $this->persistent = (php_sapi_name() == 'cli') ? false : true;
-        }
-        $this->_ensureConn();
-        self::$cacheInitialized = true;
-        return true;
-    }
-
-    /**
-     * Get a value associated with a key
-     *
-     * The value should have been set previously.
-     *
-     * @param string &$key   in; Lookup key
-     * @param mixed  &$value out; value associated with key
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheGet(&$key, &$value)
-    {
-        $this->_ensureConn();
-        $value = $this->_conn->get($key);
-        Event::handle('EndCacheGet', array($key, &$value));
-        return false;
-    }
-
-    /**
-     * Associate a value with a key
-     *
-     * @param string  &$key     in; Key to use for lookups
-     * @param mixed   &$value   in; Value to associate
-     * @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
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
-    {
-        $this->_ensureConn();
-        if ($expiry === null) {
-            $expiry = $this->defaultExpiry;
-        }
-        $success = $this->_conn->set($key, $value, $this->flag(intval($flag)), $expiry);
-        Event::handle('EndCacheSet', array($key, $value, $flag,
-                                           $expiry));
-        return false;
-    }
-
-    /**
-     * Atomically increment an existing numeric key value.
-     * Existing expiration time will not be changed.
-     *
-     * @param string &$key    in; Key to use for lookups
-     * @param int    &$step   in; Amount to increment (default 1)
-     * @param mixed  &$value  out; Incremented value, or false if key not set.
-     *
-     * @return boolean hook success
-     */
-    function onStartCacheIncrement(&$key, &$step, &$value)
-    {
-        $this->_ensureConn();
-        $value = $this->_conn->increment($key, $step);
-        Event::handle('EndCacheIncrement', array($key, $step, $value));
-        return false;
-    }
-
-    /**
-     * Delete a value associated with a key
-     *
-     * @param string  &$key     in; Key to lookup
-     * @param boolean &$success out; whether it worked
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheDelete(&$key, &$success)
-    {
-        $this->_ensureConn();
-        $success = $this->_conn->delete($key);
-        Event::handle('EndCacheDelete', array($key));
-        return false;
-    }
-
-    function onStartCacheReconnect(&$success)
-    {
-        if (empty($this->_conn)) {
-            // nothing to do
-            return true;
-        }
-        if ($this->persistent) {
-            common_log(LOG_ERR, "Cannot close persistent memcached connection");
-            $success = false;
-        } else {
-            common_log(LOG_INFO, "Closing memcached connection");
-            $success = $this->_conn->close();
-            $this->_conn = null;
-        }
-        return false;
-    }
-
-    /**
-     * Ensure that a connection exists
-     *
-     * Checks the instance $_conn variable and connects
-     * if it is empty.
-     *
-     * @return void
-     */
-
-    private function _ensureConn()
-    {
-        if (empty($this->_conn)) {
-            $this->_conn = new Memcache();
-
-            if (is_array($this->servers)) {
-                $servers = $this->servers;
-            } else {
-                $servers = array($this->servers);
-            }
-            foreach ($servers as $server) {
-                if (strpos($server, ';') !== false) {
-                    list($host, $port) = explode(';', $server);
-                } else {
-                    $host = $server;
-                    $port = 11211;
-                }
-
-                $this->_conn->addServer($host, $port, $this->persistent);
-            }
-
-            // Compress items stored in the cache if they're over threshold in size
-            // (default 2KiB) and the compression would save more than min savings
-            // ratio (default 0.2).
-
-            // Allows the cache to store objects larger than 1MB (if they
-            // compress to less than 1MB), and improves cache memory efficiency.
-
-            $this->_conn->setCompressThreshold($this->compressThreshold,
-                                               $this->compressMinSaving);
-        }
-    }
-
-    /**
-     * 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',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou, Craig Andrews',
-                            'homepage' => 'http://status.net/wiki/Plugin:Memcache',
-                            'rawdescription' =>
-                            _m('Use <a href="http://memcached.org/">Memcached</a> to cache query results.'));
-        return true;
-    }
-}
-
diff --git a/plugins/Memcached/MemcachedPlugin.php b/plugins/Memcached/MemcachedPlugin.php
new file mode 100644 (file)
index 0000000..3b3383d
--- /dev/null
@@ -0,0 +1,221 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Plugin to implement cache interface for memcached
+ *
+ * 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/>.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Craig Andrews <candrews@integralblue.com>
+ * @copyright 2009 StatusNet, Inc.
+ * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
+ * @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')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * A plugin to use memcached for the cache interface
+ *
+ * This used to be encoded as config-variable options in the core code;
+ * it's now broken out to a separate plugin. The same interface can be
+ * implemented by other plugins.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Craig Andrews <candrews@integralblue.com>
+ * @copyright 2009 StatusNet, Inc.
+ * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+class MemcachedPlugin extends Plugin
+{
+    static $cacheInitialized = false;
+
+    private $_conn  = null;
+    public $servers = array('127.0.0.1;11211');
+
+    public $defaultExpiry = 86400; // 24h
+
+    /**
+     * Initialize the plugin
+     *
+     * Note that onStartCacheGet() may have been called before this!
+     *
+     * @return boolean flag value
+     */
+    function onInitializePlugin()
+    {
+        $this->_ensureConn();
+        self::$cacheInitialized = true;
+        return true;
+    }
+
+    /**
+     * Get a value associated with a key
+     *
+     * The value should have been set previously.
+     *
+     * @param string &$key   in; Lookup key
+     * @param mixed  &$value out; value associated with key
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheGet(&$key, &$value)
+    {
+        $this->_ensureConn();
+        $value = $this->_conn->get($key);
+        Event::handle('EndCacheGet', array($key, &$value));
+        return false;
+    }
+
+    /**
+     * Associate a value with a key
+     *
+     * @param string  &$key     in; Key to use for lookups
+     * @param mixed   &$value   in; Value to associate
+     * @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
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
+    {
+        $this->_ensureConn();
+        if ($expiry === null) {
+            $expiry = $this->defaultExpiry;
+        }
+        $success = $this->_conn->set($key, $value, $expiry);
+        Event::handle('EndCacheSet', array($key, $value, $flag,
+                                           $expiry));
+        return false;
+    }
+
+    /**
+     * Atomically increment an existing numeric key value.
+     * Existing expiration time will not be changed.
+     *
+     * @param string &$key    in; Key to use for lookups
+     * @param int    &$step   in; Amount to increment (default 1)
+     * @param mixed  &$value  out; Incremented value, or false if key not set.
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheIncrement(&$key, &$step, &$value)
+    {
+        $this->_ensureConn();
+        $value = $this->_conn->increment($key, $step);
+        Event::handle('EndCacheIncrement', array($key, $step, $value));
+        return false;
+    }
+
+    /**
+     * Delete a value associated with a key
+     *
+     * @param string  &$key     in; Key to lookup
+     * @param boolean &$success out; whether it worked
+     *
+     * @return boolean hook success
+     */
+    function onStartCacheDelete(&$key, &$success)
+    {
+        $this->_ensureConn();
+        $success = $this->_conn->delete($key);
+        Event::handle('EndCacheDelete', array($key));
+        return false;
+    }
+
+    function onStartCacheReconnect(&$success)
+    {
+        // nothing to do
+        return true;
+    }
+
+    /**
+     * Ensure that a connection exists
+     *
+     * Checks the instance $_conn variable and connects
+     * if it is empty.
+     *
+     * @return void
+     */
+    private function _ensureConn()
+    {
+        if (empty($this->_conn)) {
+            $this->_conn = new Memcached(common_config('site', 'nickname'));
+
+            if (!count($this->_conn->getServerList())) {
+            if (is_array($this->servers)) {
+                $servers = $this->servers;
+            } else {
+                $servers = array($this->servers);
+            }
+            foreach ($servers as $server) {
+                if (strpos($server, ';') !== false) {
+                    list($host, $port) = explode(';', $server);
+                } else {
+                    $host = $server;
+                    $port = 11211;
+                }
+
+                $this->_conn->addServer($host, $port);
+            }
+
+            // Compress items stored in the cache.
+
+            // Allows the cache to store objects larger than 1MB (if they
+            // compress to less than 1MB), and improves cache memory efficiency.
+
+            $this->_conn->setOption(Memcached::OPT_COMPRESSION, true);
+            }
+        }
+    }
+
+    /**
+     * Translate general flags to Memcached-specific flags
+     * @param int $flag
+     * @return int
+     */
+    protected function flag($flag)
+    {
+        //no flags are presently supported
+        return $flag;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Memcached',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou, Craig Andrews',
+                            'homepage' => 'http://status.net/wiki/Plugin:Memcached',
+                            'rawdescription' =>
+                            _m('Use <a href="http://memcached.org/">Memcached</a> to cache query results.'));
+        return true;
+    }
+}
diff --git a/plugins/Memcached/locale/Memcached.pot b/plugins/Memcached/locale/Memcached.pot
new file mode 100644 (file)
index 0000000..3748566
--- /dev/null
@@ -0,0 +1,22 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: MemcachedPlugin.php:223
+msgid ""
+"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results."
+msgstr ""
diff --git a/plugins/MemcachedPlugin.php b/plugins/MemcachedPlugin.php
deleted file mode 100644 (file)
index 77b989b..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Plugin to implement cache interface for memcached
- *
- * 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/>.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @author    Craig Andrews <candrews@integralblue.com>
- * @copyright 2009 StatusNet, Inc.
- * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
- * @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')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * A plugin to use memcached for the cache interface
- *
- * This used to be encoded as config-variable options in the core code;
- * it's now broken out to a separate plugin. The same interface can be
- * implemented by other plugins.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @author    Craig Andrews <candrews@integralblue.com>
- * @copyright 2009 StatusNet, Inc.
- * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- */
-
-class MemcachedPlugin extends Plugin
-{
-    static $cacheInitialized = false;
-
-    private $_conn  = null;
-    public $servers = array('127.0.0.1;11211');
-
-    public $defaultExpiry = 86400; // 24h
-
-    /**
-     * Initialize the plugin
-     *
-     * Note that onStartCacheGet() may have been called before this!
-     *
-     * @return boolean flag value
-     */
-
-    function onInitializePlugin()
-    {
-        $this->_ensureConn();
-        self::$cacheInitialized = true;
-        return true;
-    }
-
-    /**
-     * Get a value associated with a key
-     *
-     * The value should have been set previously.
-     *
-     * @param string &$key   in; Lookup key
-     * @param mixed  &$value out; value associated with key
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheGet(&$key, &$value)
-    {
-        $this->_ensureConn();
-        $value = $this->_conn->get($key);
-        Event::handle('EndCacheGet', array($key, &$value));
-        return false;
-    }
-
-    /**
-     * Associate a value with a key
-     *
-     * @param string  &$key     in; Key to use for lookups
-     * @param mixed   &$value   in; Value to associate
-     * @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
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
-    {
-        $this->_ensureConn();
-        if ($expiry === null) {
-            $expiry = $this->defaultExpiry;
-        }
-        $success = $this->_conn->set($key, $value, $expiry);
-        Event::handle('EndCacheSet', array($key, $value, $flag,
-                                           $expiry));
-        return false;
-    }
-
-    /**
-     * Atomically increment an existing numeric key value.
-     * Existing expiration time will not be changed.
-     *
-     * @param string &$key    in; Key to use for lookups
-     * @param int    &$step   in; Amount to increment (default 1)
-     * @param mixed  &$value  out; Incremented value, or false if key not set.
-     *
-     * @return boolean hook success
-     */
-    function onStartCacheIncrement(&$key, &$step, &$value)
-    {
-        $this->_ensureConn();
-        $value = $this->_conn->increment($key, $step);
-        Event::handle('EndCacheIncrement', array($key, $step, $value));
-        return false;
-    }
-
-    /**
-     * Delete a value associated with a key
-     *
-     * @param string  &$key     in; Key to lookup
-     * @param boolean &$success out; whether it worked
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheDelete(&$key, &$success)
-    {
-        $this->_ensureConn();
-        $success = $this->_conn->delete($key);
-        Event::handle('EndCacheDelete', array($key));
-        return false;
-    }
-
-    function onStartCacheReconnect(&$success)
-    {
-        // nothing to do
-        return true;
-    }
-
-    /**
-     * Ensure that a connection exists
-     *
-     * Checks the instance $_conn variable and connects
-     * if it is empty.
-     *
-     * @return void
-     */
-
-    private function _ensureConn()
-    {
-        if (empty($this->_conn)) {
-            $this->_conn = new Memcached(common_config('site', 'nickname'));
-
-            if (!count($this->_conn->getServerList())) {
-            if (is_array($this->servers)) {
-                $servers = $this->servers;
-            } else {
-                $servers = array($this->servers);
-            }
-            foreach ($servers as $server) {
-                if (strpos($server, ';') !== false) {
-                    list($host, $port) = explode(';', $server);
-                } else {
-                    $host = $server;
-                    $port = 11211;
-                }
-
-                $this->_conn->addServer($host, $port);
-            }
-
-            // Compress items stored in the cache.
-
-            // Allows the cache to store objects larger than 1MB (if they
-            // compress to less than 1MB), and improves cache memory efficiency.
-
-            $this->_conn->setOption(Memcached::OPT_COMPRESSION, true);
-            }
-        }
-    }
-
-    /**
-     * Translate general flags to Memcached-specific flags
-     * @param int $flag
-     * @return int
-     */
-    protected function flag($flag)
-    {
-        //no flags are presently supported
-        return $flag;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'Memcached',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou, Craig Andrews',
-                            'homepage' => 'http://status.net/wiki/Plugin:Memcached',
-                            'rawdescription' =>
-                            _m('Use <a href="http://memcached.org/">Memcached</a> to cache query results.'));
-        return true;
-    }
-}
-
index ec8c9e217c8eb16e97f4edc41fcb7610f1c52af8..a48c52b5691acab1d703acf53882cf0168c60828 100644 (file)
@@ -42,7 +42,6 @@ require_once INSTALLDIR.'/plugins/Realtime/RealtimePlugin.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class MeteorPlugin extends RealtimePlugin
 {
     public $webserver     = null;
@@ -112,7 +111,8 @@ class MeteorPlugin extends RealtimePlugin
         // May throw an exception.
         $this->_socket = stream_socket_client("tcp://{$controlserver}:{$this->controlport}", $errno, $errstr, $timeout, $flags);
         if (!$this->_socket) {
-            throw new Exception("Couldn't connect to {$controlserver} on {$this->controlport}");
+            // TRANS: Exception. %1$s is the control server, %2$s is the control port.
+            throw new Exception(sprintf(_m('Couldn\'t connect to %1$s on %2$s.'),$controlserver,$this->controlport));
         }
     }
 
@@ -124,7 +124,8 @@ class MeteorPlugin extends RealtimePlugin
         $cnt = fwrite($this->_socket, $cmd);
         $result = fgets($this->_socket);
         if (preg_match('/^ERR (.*)$/', $result, $matches)) {
-            throw new Exception('Error adding meteor message "'.$matches[1].'"');
+            // TRANS: Exception. %s is the Meteor message that could not be added.
+            throw new Exception(sprintf(_m('Error adding meteor message "%s"'),$matches[1]));
         }
         // TODO: parse and deal with result
     }
@@ -146,4 +147,15 @@ class MeteorPlugin extends RealtimePlugin
         }
         return implode('-', $path);
     }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Meteor',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:Meteor',
+                            'rawdescription' =>
+                            _m('Plugin to do "real time" updates using Comet/Bayeux.'));
+        return true;
+    }
 }
index 13010e75a175f86ffb7db0803bac0ca609ae7699..b37531165232be8e94e864ac794435925d96523d 100644 (file)
@@ -51,7 +51,6 @@ class MinifyPlugin extends Plugin
      *
      * @return boolean hook return
      */
-
     function onStartInitializeRouter($m)
     {
         $m->connect('main/min',
@@ -177,8 +176,7 @@ class MinifyPlugin extends Plugin
                             'author' => 'Craig Andrews',
                             'homepage' => 'http://status.net/wiki/Plugin:Minify',
                             'rawdescription' =>
-                            _m('The Minify plugin minifies your CSS and Javascript, removing whitespace and comments.'));
+                            _m('The Minify plugin minifies StatusNet\'s CSS and JavaScript, removing whitespace and comments.'));
         return true;
     }
 }
-
index 2f65c5df2c0b0951e4c195c11af71eb94806951b..2425d50bc4bbde54b9c7295553b2a4462e51bf21 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,8 +16,20 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: minify.php:49
+msgid "The parameter \"f\" is not a valid path."
+msgstr ""
+
+#: minify.php:53
+msgid "The parameter \"f\" is required but missing."
+msgstr ""
+
+#: minify.php:111
+msgid "File type not supported."
+msgstr ""
+
 #: MinifyPlugin.php:180
 msgid ""
-"The Minify plugin minifies your CSS and Javascript, removing whitespace and "
-"comments."
+"The Minify plugin minifies StatusNet's CSS and JavaScript, removing "
+"whitespace and comments."
 msgstr ""
index 64727f5e7e27b7c4fcfc2233bf02a5cb4baf8fb9..9a59c4223c8ec1f613b995eefc01a66275a748ef 100644 (file)
@@ -46,11 +46,11 @@ class MinifyAction extends Action
             if(file_exists($this->file)) {
                 return true;
             } else {
-                $this->clientError(_('f parameter is not a valid path'),404);
+                $this->clientError(_m('The parameter "f" is not a valid path.'),404);
                 return false;
             }
         }else{
-            $this->clientError(_('f parameter is required'),500);
+            $this->clientError(_m('The parameter "f" is required but missing.'),500);
             return false;
         }
     }
@@ -108,10 +108,9 @@ class MinifyAction extends Action
                 header('Content-Type: ' . self::TYPE_CSS);
                 break;
             default:
-                $this->clientError(_('File type not supported'),500);
+                $this->clientError(_m('File type not supported.'),500);
                 return false;
         }
         return $out;
     }
 }
-
index 72a6a04fbd9ac27a7f428d361b5179b751cab0e8..b042bf7edd64fc304d2d0dfdd15a06eb11135789 100644 (file)
@@ -36,7 +36,6 @@ define('PAGE_TYPE_PREFS_MOBILEPROFILE',
 
 require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php';
 
-
 /**
  * Superclass for plugin to output XHTML Mobile Profile
  *
@@ -46,7 +45,6 @@ require_once INSTALLDIR.'/plugins/Mobile/WAP20Plugin.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class MobileProfilePlugin extends WAP20Plugin
 {
     public $DTD            = null;
@@ -60,14 +58,13 @@ class MobileProfilePlugin extends WAP20Plugin
         parent::__construct();
     }
 
-
     function onStartShowHTML($action)
     {
         // XXX: This should probably graduate to WAP20Plugin
 
         // If they are on the mobile site, serve them MP
         if ((common_config('site', 'mobileserver').'/'.
-             common_config('site', 'path').'/' == 
+             common_config('site', 'path').'/' ==
             $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) {
 
             $this->serveMobile = true;
@@ -78,18 +75,18 @@ class MobileProfilePlugin extends WAP20Plugin
             //if (strstr('application/vnd.wap.xhtml+xml', $type) !== false) {
             //    $this->serveMobile = true;
             //} else {
-                // If they are a mobile device that supports WAP 2.0, 
+                // If they are a mobile device that supports WAP 2.0,
                 // serve them MP
 
                 // XXX: Browser sniffing sucks
 
-                // I really don't like going through this every page, 
+                // I really don't like going through this every page,
                 // perhaps use $_SESSION or cookies
 
-                // May be better to group the devices in terms of 
+                // May be better to group the devices in terms of
                 // low,mid,high-end
 
-                // Or, detect the mobile devices based on their support for 
+                // Or, detect the mobile devices based on their support for
                 // MP 1.0, 1.1, or 1.2 may be ideal. Possible?
 
                 $this->mobiledevices = array(
@@ -165,11 +162,11 @@ class MobileProfilePlugin extends WAP20Plugin
                 }
             //}
 
-            // If they are okay with MP, and the site has a mobile server, 
+            // If they are okay with MP, and the site has a mobile server,
             // redirect there
-            if ($this->serveMobile && 
+            if ($this->serveMobile &&
                 common_config('site', 'mobileserver') !== false &&
-                (common_config('site', 'mobileserver') != 
+                (common_config('site', 'mobileserver') !=
                     common_config('site', 'server'))) {
 
                 // FIXME: Redirect to equivalent page on mobile site instead
@@ -193,8 +190,8 @@ class MobileProfilePlugin extends WAP20Plugin
             $type = common_negotiate_type($cp, $sp);
 
             if (!$type) {
-                throw new ClientException(_('This page is not available in a '.
-                                            'media type you accept'), 406);
+                throw new ClientException(_m('This page is not available in a '.
+                                            'media type you accept.'), 406);
             }
         //}
 
@@ -217,7 +214,6 @@ class MobileProfilePlugin extends WAP20Plugin
         return false;
     }
 
-
     function setMobileFeatures($useragent)
     {
         $mobiledeviceInputFileType = array(
@@ -234,7 +230,6 @@ class MobileProfilePlugin extends WAP20Plugin
         }
     }
 
-
     function onStartShowStatusNetStyles($action)
     {
         if (!$this->serveMobile) {
@@ -262,7 +257,6 @@ class MobileProfilePlugin extends WAP20Plugin
         return false;
     }
 
-
     function onStartShowUAStyles($action) {
         if (!$this->serveMobile) {
             return true;
@@ -288,18 +282,17 @@ class MobileProfilePlugin extends WAP20Plugin
         return false;
     }
 
-
     function _showLogo($action)
     {
         $action->elementStart('address', 'vcard');
         $action->elementStart('a', array('class' => 'url home bookmark',
                                        'href' => common_local_url('public')));
-        if (common_config('site', 'mobilelogo') || 
-            file_exists(Theme::file('logo.png')) || 
+        if (common_config('site', 'mobilelogo') ||
+            file_exists(Theme::file('logo.png')) ||
             file_exists(Theme::file('mobilelogo.png'))) {
 
             $action->element('img', array('class' => 'photo',
-                'src' => (common_config('site', 'mobilelogo')) ? common_config('site', 'mobilelogo') : 
+                'src' => (common_config('site', 'mobilelogo')) ? common_config('site', 'mobilelogo') :
                             ((file_exists(Theme::file('mobilelogo.png'))) ? (Theme::path('mobilelogo.png')) : Theme::path('logo.png')),
                 'alt' => common_config('site', 'name')));
         }
@@ -308,44 +301,42 @@ class MobileProfilePlugin extends WAP20Plugin
         $action->elementEnd('address');
     }
 
-
     function _showPrimaryNav($action)
     {
         $user    = common_current_user();
         $action->elementStart('ul', array('id' => 'site_nav_global_primary'));
         if ($user) {
             $action->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
-                            _('Home'));
+                            _m('Home'));
             $action->menuItem(common_local_url('profilesettings'),
-                            _('Account'));
+                            _m('Account'));
             $action->menuItem(common_local_url('oauthconnectionssettings'),
-                                _('Connect'));
+                                _m('Connect'));
             if ($user->hasRight(Right::CONFIGURESITE)) {
                 $action->menuItem(common_local_url('siteadminpanel'),
-                                _('Admin'), _('Change site configuration'), false, 'nav_admin');
+                                _m('Admin'), _m('Change site configuration'), false, 'nav_admin');
             }
             if (common_config('invite', 'enabled')) {
                 $action->menuItem(common_local_url('invite'),
-                                _('Invite'));
+                                _m('Invite'));
             }
             $action->menuItem(common_local_url('logout'),
-                            _('Logout'));
+                            _m('Logout'));
         } else {
             if (!common_config('site', 'closed')) {
                 $action->menuItem(common_local_url('register'),
-                                _('Register'));
+                                _m('Register'));
             }
             $action->menuItem(common_local_url('login'),
-                            _('Login'));
+                            _m('Login'));
         }
         if ($user || !common_config('site', 'private')) {
             $action->menuItem(common_local_url('peoplesearch'),
-                            _('Search'));
+                            _m('Search'));
         }
         $action->elementEnd('ul');
     }
 
-
     function onStartShowNoticeFormData($form)
     {
         if (!$this->serveMobile) {
@@ -367,11 +358,11 @@ class MobileProfilePlugin extends WAP20Plugin
 
         if (common_config('attachments', 'uploads')) {
             if ($this->mobileFeatures['inputfiletype']) {
-                $form->out->element('label', array('for' => 'notice_data-attach'), _('Attach'));
+                $form->out->element('label', array('for' => 'notice_data-attach'), _m('Attach'));
                 $form->out->element('input', array('id' => 'notice_data-attach',
                                                    'type' => 'file',
                                                    'name' => 'attach',
-                                                   'title' => _('Attach a file')));
+                                                   'title' => _m('Attach a file')));
                 $form->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota'));
             }
         }
@@ -383,7 +374,6 @@ class MobileProfilePlugin extends WAP20Plugin
         return false;
     }
 
-
     function onStartShowAside($action)
     {
         if ($this->serveMobile) {
@@ -391,13 +381,11 @@ class MobileProfilePlugin extends WAP20Plugin
         }
     }
 
-
     function onStartShowScripts($action)
     {
 
     }
 
-
     function _common_path($relative, $ssl=false)
     {
         $pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : '';
index c4af49a226e7cb5e94ffbe7cacfae7febf0b9cc2..7c58516b1b6e6aaaa10621f85dedfd9d3d5f0773 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index 9f53173db20f3125f4749395672cb1ab99545bfe..dea0417f5fd758375685746649e94f9d590ac2d3 100644 (file)
@@ -123,7 +123,7 @@ class NoticeTitlePlugin extends Plugin
                             'author' => 'Evan Prodromou',
                             'homepage' => $url,
                             'rawdescription' =>
-                            _m('Adds optional titles to notices'));
+                            _m('Adds optional titles to notices.'));
         return true;
     }
 
@@ -164,7 +164,7 @@ class NoticeTitlePlugin extends Plugin
         $title = $action->trimmed('notice_title');
         if (!empty($title)) {
             if (mb_strlen($title) > Notice_title::MAXCHARS) {
-                throw new Exception(sprintf(_m("Notice title too long (max %d)",
+                throw new Exception(sprintf(_m("The notice title is too long (max %d characters).",
                                                Notice_title::MAXCHARS)));
             }
         }
@@ -296,7 +296,7 @@ class NoticeTitlePlugin extends Plugin
             if (!empty($title)) {
                 $action->element('title', null,
                                  // TRANS: Page title. %1$s is the title, %2$s is the site name.
-                                 sprintf(_("%1\$s - %2\$s"),
+                                 sprintf(_m("%1\$s - %2\$s"),
                                          $title,
                                          common_config('site', 'name')));
             }
@@ -328,4 +328,3 @@ class NoticeTitlePlugin extends Plugin
         return true;
     }
 }
-
index 1a451ba74c59399c072b5ef92efdef3558c81bb7..f5a9628313ecf97f7a24f448d53eef8bc16f9cd7 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -17,5 +17,11 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 #: NoticeTitlePlugin.php:126
-msgid "Adds optional titles to notices"
+msgid "Adds optional titles to notices."
+msgstr ""
+
+#. TRANS: Page title. %1$s is the title, %2$s is the site name.
+#: NoticeTitlePlugin.php:299
+#, php-format
+msgid "%1$s - %2$s"
 msgstr ""
index 77bc9872b401827057bc6b5c92fc118ead2b4fb1..2dddfcbe2bd0e1f9023d9701ad784375971dfa9f 100644 (file)
@@ -223,6 +223,7 @@ class OStatusPlugin extends Plugin
                                     array('nickname' => $profile->nickname));
             $output->element('a', array('href' => $url,
                                         'class' => 'entity_remote_subscribe'),
+                                // TRANS: Link description for link to subscribe to a remote user.
                                 _m('Subscribe'));
 
             $output->elementEnd('li');
@@ -241,6 +242,7 @@ class OStatusPlugin extends Plugin
                                     array('group' => $group->nickname));
             $output->element('a', array('href' => $url,
                                         'class' => 'entity_remote_subscribe'),
+                                // TRANS: Link description for link to join a remote group.
                                 _m('Join'));
         }
 
@@ -453,6 +455,7 @@ class OStatusPlugin extends Plugin
                 }
 
                 $url = $notice->url;
+                // TRANSLATE: %s is a domain.
                 $title = sprintf(_m("Sent from %s via OStatus"), $domain);
                 return false;
             }
@@ -524,6 +527,7 @@ class OStatusPlugin extends Plugin
         }
 
         if (!$oprofile->subscribe()) {
+            // TRANS: Exception.
             throw new Exception(_m('Could not set up remote subscription.'));
         }
     }
@@ -563,10 +567,10 @@ class OStatusPlugin extends Plugin
                                   common_date_iso8601(time()));
 
         $act->time    = time();
-        $act->title   = _("Follow");
+        $act->title   = _m("Follow");
         // TRANS: Success message for subscribe to user attempt through OStatus.
         // TRANS: %1$s is the subscriber name, %2$s is the subscribed user's name.
-        $act->content = sprintf(_("%1$s is now following %2$s."),
+        $act->content = sprintf(_m('%1$s is now following %2$s.'),
                                $subscriber->getBestName(),
                                $other->getBestName());
 
@@ -613,10 +617,10 @@ class OStatusPlugin extends Plugin
                                   common_date_iso8601(time()));
 
         $act->time    = time();
-        $act->title   = _("Unfollow");
+        $act->title   = _m('Unfollow');
         // TRANS: Success message for unsubscribe from user attempt through OStatus.
         // TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
-        $act->content = sprintf(_("%1$s stopped following %2$s."),
+        $act->content = sprintf(_m('%1$s stopped following %2$s.'),
                                $profile->getBestName(),
                                $other->getBestName());
 
@@ -671,6 +675,7 @@ class OStatusPlugin extends Plugin
                 return true;
             } else {
                 $oprofile->garbageCollect();
+                // TRANS: Exception.
                 throw new Exception(_m("Failed joining remote group."));
             }
         }
@@ -729,7 +734,6 @@ class OStatusPlugin extends Plugin
      * @param Notice $notice being favored
      * @return hook return value
      */
-
     function onEndFavorNotice(Profile $profile, Notice $notice)
     {
         $user = User::staticGet('id', $profile->id);
@@ -753,10 +757,10 @@ class OStatusPlugin extends Plugin
                                   common_date_iso8601(time()));
 
         $act->time    = time();
-        $act->title   = _("Favor");
+        $act->title   = _m('Favor');
         // TRANS: Success message for adding a favorite notice through OStatus.
         // TRANS: %1$s is the favoring user's name, %2$s is URI to the favored notice.
-        $act->content = sprintf(_("%1$s marked notice %2$s as a favorite."),
+        $act->content = sprintf(_m('%1$s marked notice %2$s as a favorite.'),
                                $profile->getBestName(),
                                $notice->uri);
 
@@ -799,10 +803,10 @@ class OStatusPlugin extends Plugin
                                   $notice->id,
                                   common_date_iso8601(time()));
         $act->time    = time();
-        $act->title   = _("Disfavor");
+        $act->title   = _m('Disfavor');
         // TRANS: Success message for remove a favorite notice through OStatus.
         // TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
-        $act->content = sprintf(_("%1$s marked notice %2$s as no longer a favorite."),
+        $act->content = sprintf(_m('%1$s marked notice %2$s as no longer a favorite.'),
                                $profile->getBestName(),
                                $notice->uri);
 
@@ -876,8 +880,9 @@ class OStatusPlugin extends Plugin
             $action->elementStart('p', array('id' => 'entity_remote_subscribe',
                                              'class' => 'entity_subscribe'));
             $action->element('a', array('href' => common_local_url($target),
-                                        'class' => 'entity_remote_subscribe')
-                                , _m('Remote')); // @todo: i18n: Add translator hint for this text.
+                                        'class' => 'entity_remote_subscribe'),
+                                // TRANS: Link text for link to remote subscribe.
+                                _m('Remote'));
             $action->elementEnd('p');
             $action->elementEnd('div');
         }
@@ -916,6 +921,7 @@ class OStatusPlugin extends Plugin
                                   $profile->id,
                                   common_date_iso8601(time()));
         $act->time    = time();
+        // TRANS: Title for activity.
         $act->title   = _m("Profile update");
         // TRANS: Ping text for remote profile update through OStatus.
         // TRANS: %s is user that updated their profile.
@@ -948,7 +954,8 @@ class OStatusPlugin extends Plugin
                                         array('nickname' => $profileUser->nickname));
                 $output->element('a', array('href' => $url,
                                             'class' => 'entity_remote_subscribe'),
-                                 _m('Subscribe')); // @todo: i18n: Add context.
+                                  // TRANS: Link text for a user to subscribe to an OStatus user.
+                                 _m('Subscribe'));
                 $output->elementEnd('li');
             }
         }
@@ -962,9 +969,9 @@ class OStatusPlugin extends Plugin
                             'version' => STATUSNET_VERSION,
                             'author' => 'Evan Prodromou, James Walker, Brion Vibber, Zach Copley',
                             'homepage' => 'http://status.net/wiki/Plugin:OStatus',
-                            'rawdescription' =>
-                            _m('Follow people across social networks that implement '.
-                               '<a href="http://ostatus.org/">OStatus</a>.')); // @todo i18n: Add translator hint.
+                            // TRANS: Plugin description.
+                            'rawdescription' => _m('Follow people across social networks that implement '.
+                               '<a href="http://ostatus.org/">OStatus</a>.'));
 
         return true;
     }
index 5094dccf0f05015bc408c5a4d833a67ef19ea977..3a3d63fe20568a11e29ecf899117db137f628c11 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/**
- * @package OStatusPlugin
- * @author James Walker <james@status.net>
- */
-
 if (!defined('STATUSNET')) {
     exit(1);
 }
 
+/**
+ * @package OStatusPlugin
+ * @author James Walker <james@status.net>
+ */
 class GroupsalmonAction extends SalmonAction
 {
     var $group = null;
@@ -37,17 +36,20 @@ class GroupsalmonAction extends SalmonAction
         $id = $this->trimmed('id');
 
         if (!$id) {
-            $this->clientError(_('No ID.'));
+            // TRANS: Client error.
+            $this->clientError(_m('No ID.'));
         }
 
         $this->group = User_group::staticGet('id', $id);
 
         if (empty($this->group)) {
-            $this->clientError(_('No such group.'));
+            // TRANS: Client error.
+            $this->clientError(_m('No such group.'));
         }
 
         $oprofile = Ostatus_profile::staticGet('group_id', $id);
         if ($oprofile) {
+            // TRANS: Client error.
             $this->clientError(_m("Can't accept remote posts for a remote group."));
         }
 
@@ -57,7 +59,6 @@ class GroupsalmonAction extends SalmonAction
     /**
      * We've gotten a post event on the Salmon backchannel, probably a reply.
      */
-
     function handlePost()
     {
         // @fixme process all objects?
@@ -69,18 +70,20 @@ class GroupsalmonAction extends SalmonAction
         case ActivityObject::COMMENT:
             break;
         default:
+            // TRANS: Client exception.
             throw new ClientException("Can't handle that kind of post.");
         }
 
         // Notice must be to the attention of this group
-
         $context = $this->activity->context;
 
         if (empty($context->attention)) {
+            // TRANS: Client exception.
             throw new ClientException("Not to the attention of anyone.");
         } else {
             $uri = common_local_url('groupbyid', array('id' => $this->group->id));
             if (!in_array($uri, $context->attention)) {
+                // TRANS: Client exception.
                 throw new ClientException("Not to the attention of this group.");
             }
         }
@@ -116,14 +119,15 @@ class GroupsalmonAction extends SalmonAction
      *        currently we're doing the main logic in joingroup action
      *        and so have to repeat it here.
      */
-
     function handleJoin()
     {
         $oprofile = $this->ensureProfile();
         if (!$oprofile) {
+            // TRANS: Client error.
             $this->clientError(_m("Can't read profile to set up group membership."));
         }
         if ($oprofile->isGroup()) {
+            // TRANS: Client error.
             $this->clientError(_m("Groups can't join groups."));
         }
 
@@ -137,7 +141,7 @@ class GroupsalmonAction extends SalmonAction
         }
 
         if (Group_block::isBlocked($this->group, $profile)) {
-            $this->clientError(_('You have been blocked from that group by the admin.'), 403);
+            $this->clientError(_m('You have been blocked from that group by the admin.'), 403);
             return false;
         }
 
@@ -151,6 +155,7 @@ class GroupsalmonAction extends SalmonAction
                 //Event::handle('EndJoinGroup', array($this->group, $profile));
             //}
         } catch (Exception $e) {
+            // TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
             $this->serverError(sprintf(_m('Could not join remote user %1$s to group %2$s.'),
                                        $oprofile->uri, $this->group->nickname));
         }
@@ -159,7 +164,6 @@ class GroupsalmonAction extends SalmonAction
     /**
      * A remote user left our group.
      */
-
     function handleLeave()
     {
         $oprofile = $this->ensureProfile();
@@ -180,10 +184,10 @@ class GroupsalmonAction extends SalmonAction
                 //Event::handle('EndLeaveGroup', array($this->group, $profile));
             //}
         } catch (Exception $e) {
+            // TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
             $this->serverError(sprintf(_m('Could not remove remote user %1$s from group %2$s.'),
                                        $oprofile->uri, $this->group->nickname));
             return;
         }
     }
-
 }
index 8ca07f9165535e493d52eb3b598ca59057051fac..db4c913e166ee142496f19284aa58c5ea56d9f3a 100644 (file)
@@ -26,7 +26,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
 class HostMetaAction extends Action
 {
-
     function handle()
     {
         parent::handle();
index 1861e866f293a51b30851375c1e81373c8b3b8b6..7db00ffbef1997591548d6964c2b0e03389a5a72 100644 (file)
@@ -72,13 +72,16 @@ class OStatusGroupAction extends OStatusSubAction
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
         $this->input('profile',
+                     // TRANS: Field label.
                      _m('Join group'),
                      $this->profile_uri,
+                     // TRANS: Tooltip for field label "Join group".
                      _m("OStatus group's address, like http://example.net/group/nickname."));
         $this->elementEnd('li');
         $this->elementEnd('ul');
 
-        $this->submit('validate', _m('Continue'));
+        // TRANS: Button text.
+        $this->submit('validate', _m('BUTTON','Continue'));
 
         $this->elementEnd('fieldset');
 
@@ -156,7 +159,6 @@ class OStatusGroupAction extends OStatusSubAction
      *
      * @return string Title of the page
      */
-
     function title()
     {
         // TRANS: Page title for OStatus remote group join form
@@ -168,9 +170,9 @@ class OStatusGroupAction extends OStatusSubAction
      *
      * @return instructions for use
      */
-
     function getInstructions()
     {
+        // TRANS: Instructions.
         return _m('You can subscribe to groups from other supported sites. Paste the group\'s profile URI below:');
     }
 
index 0c991aba98659602470fe1a51dd6100ce2ab0ada..f576823e314f831e866d98eacf4080b5e2dec12d 100644 (file)
@@ -27,7 +27,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
 class OStatusInitAction extends Action
 {
-
     var $nickname;
     var $group;
     var $profile;
@@ -38,6 +37,7 @@ class OStatusInitAction extends Action
         parent::prepare($args);
 
         if (common_logged_in()) {
+            // TRANS: Client error.
             $this->clientError(_m('You can use the local subscription!'));
             return false;
         }
@@ -78,6 +78,7 @@ class OStatusInitAction extends Action
             $this->xw->startDocument('1.0', 'UTF-8');
             $this->elementStart('html');
             $this->elementStart('head');
+            // TRANS: Form title.
             $this->element('title', null, _m('Subscribe to user'));
             $this->elementEnd('head');
             $this->elementStart('body');
@@ -92,11 +93,15 @@ class OStatusInitAction extends Action
     function showContent()
     {
         if ($this->group) {
+            // TRANS: Form legend.
             $header = sprintf(_m('Join group %s'), $this->group);
-            $submit = _m('Join');
+            // TRANS: Button text.
+            $submit = _m('BUTTON','Join');
         } else {
+            // TRANS: Form legend.
             $header = sprintf(_m('Subscribe to %s'), $this->nickname);
-            $submit = _m('Subscribe');
+            // TRANS: Button text.
+            $submit = _m('BUTTON','Subscribe');
         }
         $this->elementStart('form', array('id' => 'form_ostatus_connect',
                                           'method' => 'post',
@@ -108,12 +113,15 @@ class OStatusInitAction extends Action
 
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li', array('id' => 'ostatus_nickname'));
+        // TRANS: Field label.
         $this->input('nickname', _m('User nickname'), $this->nickname,
                      _m('Nickname of the user you want to follow.'));
         $this->hidden('group', $this->group); // pass-through for magic links
         $this->elementEnd('li');
         $this->elementStart('li', array('id' => 'ostatus_profile'));
+        // TRANS: Field label.
         $this->input('profile', _m('Profile Account'), $this->profile,
+                      // TRANS: Tooltip for field label "Profile Account".
                      _m('Your account id (e.g. user@identi.ca).'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
@@ -135,6 +143,7 @@ class OStatusInitAction extends Action
         } elseif (strpos($this->profile, '@') !== false) {
             $this->connectWebfinger($this->profile);
         } else {
+            // TRANS: Client error.
             $this->clientError(_m("Must provide a remote profile."));
         }
     }
@@ -146,6 +155,7 @@ class OStatusInitAction extends Action
         $disco = new Discovery;
         $result = $disco->lookup($acct);
         if (!$result) {
+            // TRANS: Client error.
             $this->clientError(_m("Couldn't look up OStatus account profile."));
         }
 
@@ -158,6 +168,7 @@ class OStatusInitAction extends Action
             }
 
         }
+        // TRANS: Client error.
         $this->clientError(_m("Couldn't confirm remote profile address."));
     }
 
@@ -183,6 +194,7 @@ class OStatusInitAction extends Action
             if ($user) {
                 return common_local_url('userbyid', array('id' => $user->id));
             } else {
+                // TRANS: Client error.
                 $this->clientError("No such user.");
             }
         } else if ($this->group) {
@@ -190,16 +202,18 @@ class OStatusInitAction extends Action
             if ($group) {
                 return common_local_url('groupbyid', array('id' => $group->group_id));
             } else {
+                // TRANS: Client error.
                 $this->clientError("No such group.");
             }
         } else {
+            // TRANS: Client error.
             $this->clientError("No local user or group nickname provided.");
         }
     }
 
     function title()
     {
+      // TRANS: Page title.
       return _m('OStatus Connect');
     }
-
 }
index 4cbd7d034877157aaa9d6aedf4ec2ba38f918745..493b519657de346ad64991d97390b9fe76ad300c 100644 (file)
@@ -62,13 +62,15 @@ class OStatusSubAction extends Action
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
         $this->input('profile',
+                     // TRANS: Field label for a field that takes an OStatus user address.
                      _m('Subscribe to'),
                      $this->profile_uri,
-                     _m("OStatus user's address, like nickname@example.com or http://example.net/nickname"));  // @todo i18n FIXME: needs context/translator hint.
+                     // TRANS: Tooltip for field label "Subscribe to".
+                     _m('OStatus user\'s address, like nickname@example.com or http://example.net/nickname'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-
-        $this->submit('validate', _m('Continue')); // @todo i18n FIXME: needs context/translator hint.
+        // TRANS: Button text.
+        $this->submit('validate', _m('BUTTON','Continue'));
 
         $this->elementEnd('fieldset');
 
@@ -103,10 +105,14 @@ class OStatusSubAction extends Action
         $this->hidden('profile', $this->profile_uri);
         if ($this->oprofile->isGroup()) {
             $this->submit('submit', _m('Join'), 'submit', null,
-                         _m('Join this group')); // @todo i18n FIXME: needs context/translator hint.
+                         // TRANS: Button text.
+                         // TRANS: Tooltip for button "Join".
+                         _m('BUTTON','Join this group'));
         } else {
-            $this->submit('submit', _m('Confirm'), 'submit', null,
-                         _m('Subscribe to this user')); // @todo i18n FIXME: needs context/translator hint.
+            // TRANS: Button text.
+            $this->submit('submit', _m('BUTTON','Confirm'), 'submit', null,
+                         // TRANS: Tooltip for button "Confirm".
+                         _m('Subscribe to this user'));
         }
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
@@ -156,7 +162,7 @@ class OStatusSubAction extends Action
 
         $this->elementStart('div', 'entity_profile vcard');
         $this->elementStart('dl', 'entity_depiction');
-        $this->element('dt', null, _('Photo'));
+        $this->element('dt', null, _m('Photo'));
         $this->elementStart('dd');
         $this->element('img', array('src' => $avatar,
                                     'class' => 'photo avatar',
@@ -167,7 +173,7 @@ class OStatusSubAction extends Action
         $this->elementEnd('dl');
 
         $this->elementStart('dl', 'entity_nickname');
-        $this->element('dt', null, _('Nickname'));
+        $this->element('dt', null, _m('Nickname'));
         $this->elementStart('dd');
         $hasFN = ($fullname !== '') ? 'nickname' : 'fn nickname';
         $this->elementStart('a', array('href' => $profile,
@@ -188,7 +194,7 @@ class OStatusSubAction extends Action
         }
         if (!is_null($location)) {
             $this->elementStart('dl', 'entity_location');
-            $this->element('dt', null, _('Location'));
+            $this->element('dt', null, _m('Location'));
             $this->elementStart('dd', 'label');
             $this->raw($location);
             $this->elementEnd('dd');
@@ -197,7 +203,7 @@ class OStatusSubAction extends Action
 
         if (!is_null($homepage)) {
             $this->elementStart('dl', 'entity_url');
-            $this->element('dt', null, _('URL'));
+            $this->element('dt', null, _m('URL'));
             $this->elementStart('dd');
             $this->elementStart('a', array('href' => $homepage,
                                                 'class' => 'url'));
@@ -209,7 +215,7 @@ class OStatusSubAction extends Action
 
         if (!is_null($note)) {
             $this->elementStart('dl', 'entity_note');
-            $this->element('dt', null, _('Note'));
+            $this->element('dt', null, _m('Note'));
             $this->elementStart('dd', 'note');
             $this->raw($note);
             $this->elementEnd('dd');
@@ -244,31 +250,39 @@ class OStatusSubAction extends Action
             } else if (Validate::uri($this->profile_uri)) {
                 $this->oprofile = Ostatus_profile::ensureProfileURL($this->profile_uri);
             } else {
+                // TRANS: Error text.
                 $this->error = _m("Sorry, we could not reach that address. Please make sure that the OStatus address is like nickname@example.com or http://example.net/nickname.");
                 common_debug('Invalid address format.', __FILE__);
                 return false;
             }
             return true;
         } catch (FeedSubBadURLException $e) {
+            // TRANS: Error text.
             $this->error = _m("Sorry, we could not reach that address. Please make sure that the OStatus address is like nickname@example.com or http://example.net/nickname.");
             common_debug('Invalid URL or could not reach server.', __FILE__);
         } catch (FeedSubBadResponseException $e) {
+            // TRANS: Error text.
             $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later.");
             common_debug('Cannot read feed; server returned error.', __FILE__);
         } catch (FeedSubEmptyException $e) {
+            // TRANS: Error text.
             $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later.");
             common_debug('Cannot read feed; server returned an empty page.', __FILE__);
         } catch (FeedSubBadHTMLException $e) {
+            // TRANS: Error text.
             $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later.");
             common_debug('Bad HTML, could not find feed link.', __FILE__);
         } catch (FeedSubNoFeedException $e) {
+            // TRANS: Error text.
             $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later.");
             common_debug('Could not find a feed linked from this URL.', __FILE__);
         } catch (FeedSubUnrecognizedTypeException $e) {
+            // TRANS: Error text.
             $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later.");
             common_debug('Not a recognized feed type.', __FILE__);
         } catch (Exception $e) {
             // Any new ones we forgot about
+            // TRANS: Error text.
             $this->error = _m("Sorry, we could not reach that address. Please make sure that the OStatus address is like nickname@example.com or http://example.net/nickname.");
             common_debug(sprintf('Bad feed URL: %s %s', get_class($e), $e->getMessage()), __FILE__);
         }
@@ -350,7 +364,7 @@ class OStatusSubAction extends Action
         // CSRF protection
         $token = $this->trimmed('token');
         if (!$token || $token != common_session_token()) {
-            $this->showForm(_('There was a problem with your session token. '.
+            $this->showForm(_m('There was a problem with your session token. '.
                               'Try again, please.'));
             return;
         }
@@ -377,6 +391,7 @@ class OStatusSubAction extends Action
             $this->xw->startDocument('1.0', 'UTF-8');
             $this->elementStart('html');
             $this->elementStart('head');
+            // TRANS: Form title.
             $this->element('title', null, _m('Subscribe to user'));
             $this->elementEnd('head');
             $this->elementStart('body');
@@ -408,6 +423,7 @@ class OStatusSubAction extends Action
 
     function getInstructions()
     {
+        // TRANS: Instructions.
         return _m('You can subscribe to users from other supported sites. Paste their address or profile URI below:');
     }
 
@@ -426,7 +442,6 @@ class OStatusSubAction extends Action
      *
      * @return void
      */
-
     function showContent()
     {
         if ($this->oprofile) {
@@ -459,5 +474,4 @@ class OStatusSubAction extends Action
     function showNoticeForm() {
         // nop
     }
-
 }
index 3fcb982b879f614e28d99a9b97657b2d86ac9a66..9e84f72ecb968642d7897ea4400be9cff904b568 100644 (file)
@@ -34,7 +34,7 @@ class OwnerxrdAction extends XrdAction
         $this->user = User::siteOwner();
 
         if (!$this->user) {
-            $this->clientError(_('No such user.'), 404);
+            $this->clientError(_m('No such user.'), 404);
             return false;
         }
 
index 6c69787455df7dde3c2e88aa2aed66066eee7048..701a39c1638b7eeeaf55c8f94872924b3bdf70b8 100644 (file)
@@ -24,7 +24,6 @@
 
 if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
-
 class PushCallbackAction extends Action
 {
     function handle()
@@ -46,13 +45,13 @@ class PushCallbackAction extends Action
         $feedid = $this->arg('feed');
         common_log(LOG_INFO, "POST for feed id $feedid");
         if (!$feedid) {
-            throw new ServerException('Empty or invalid feed id.', 400);
+            throw new ServerException(_m('Empty or invalid feed id.'), 400);
         }
 
         $feedsub = FeedSub::staticGet('id', $feedid);
         if (!$feedsub) {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ServerException('Unknown PuSH feed id ' . $feedid, 400);
+            // TRANS: Server exception. %s is a feed ID.
+            throw new ServerException(sprintf(_m('Unknown PuSH feed id %s'),$feedid), 400);
         }
 
         $hmac = '';
@@ -84,30 +83,31 @@ class PushCallbackAction extends Action
         $verify_token = $this->arg('hub_verify_token');
 
         if ($mode != 'subscribe' && $mode != 'unsubscribe') {
-            throw new ClientException("Bad hub.mode $mode", 404);
+            // TRANS: Client exception. %s is an invalid value for hub.mode.
+            throw new ClientException(sprintf(_m('Bad hub.mode "$s".',$mode)), 404);
         }
 
         $feedsub = FeedSub::staticGet('uri', $topic);
         if (!$feedsub) {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Bad hub.topic feed $topic.", 404);
+            // TRANS: Client exception. %s is an invalid feed name.
+            throw new ClientException(sprintf(_m('Bad hub.topic feed "%s".'),$topic), 404);
         }
 
         if ($feedsub->verify_token !== $verify_token) {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Bad hub.verify_token $token for $topic.", 404);
+            // TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given.
+            throw new ClientException(sprintf(_m('Bad hub.verify_token %1$s for %2$s.'),$token,$topic), 404);
         }
 
         if ($mode == 'subscribe') {
             // We may get re-sub requests legitimately.
             if ($feedsub->sub_state != 'subscribe' && $feedsub->sub_state != 'active') {
-                // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-                throw new ClientException("Unexpected subscribe request for $topic.", 404);
+                // TRANS: Client exception. %s is an invalid topic.
+                throw new ClientException(sprintf(_m('Unexpected subscribe request for %s.'),$topic), 404);
             }
         } else {
             if ($feedsub->sub_state != 'unsubscribe') {
-                // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-                throw new ClientException("Unexpected unsubscribe request for $topic.", 404);
+                // TRANS: Client exception. %s is an invalid topic.
+                throw new ClientException(sprintf(_m('Unexpected unsubscribe request for %s.'),$topic), 404);
             }
         }
 
index 6909b8539131f4c57dc38425561398147350a045..68035ab5cc20aaad6e6a760e0aeb6154e18e8a2c 100644 (file)
@@ -62,11 +62,11 @@ class PushHubAction extends Action
             $this->subunsub($mode);
             break;
         case "publish":
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Publishing outside feeds not supported.", 400);
+            // TRANS: Client exception.
+            throw new ClientException(_m('Publishing outside feeds not supported.'), 400);
         default:
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Unrecognized mode '$mode'.", 400);
+            // TRANS: Client exception. %s is a mode.
+            throw new ClientException(sprintf(_m('Unrecognized mode "%s".'),$mode), 400);
         }
     }
 
@@ -85,28 +85,28 @@ class PushHubAction extends Action
 
         $topic = $this->argUrl('hub.topic');
         if (!$this->recognizedFeed($topic)) {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Unsupported hub.topic $topic; this hub only serves local user and group Atom feeds.");
+            // TRANS: Client exception. %s is a topic.
+            throw new ClientException(sprintf(_m('Unsupported hub.topic %s this hub only serves local user and group Atom feeds.'),$topic));
         }
 
         $verify = $this->arg('hub.verify'); // @fixme may be multiple
         if ($verify != 'sync' && $verify != 'async') {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Invalid hub.verify $verify; must be sync or async.");
+            // TRANS: Client exception.
+            throw new ClientException(sprintf(_m('Invalid hub.verify "%s". It must be sync or async.'),$verify));
         }
 
         $lease = $this->arg('hub.lease_seconds', null);
         if ($mode == 'subscribe' && $lease != '' && !preg_match('/^\d+$/', $lease)) {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Invalid hub.lease $lease; must be empty or positive integer.");
+            // TRANS: Client exception.
+            throw new ClientException(sprintf(_m('Invalid hub.lease "%s". It must be empty or positive integer.'),$lease));
         }
 
         $token = $this->arg('hub.verify_token', null);
 
         $secret = $this->arg('hub.secret', null);
         if ($secret != '' && strlen($secret) >= 200) {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Invalid hub.secret $secret; must be under 200 bytes.");
+            // TRANS: Client exception.
+            throw new ClientException(sprintf(_m('Invalid hub.secret "%s". It must be under 200 bytes.'),$secret));
         }
 
         $sub = HubSub::staticGet($topic, $callback);
@@ -157,8 +157,8 @@ class PushHubAction extends Action
             if ($feed == $userFeed) {
                 $user = User::staticGet('id', $id);
                 if (!$user) {
-                    // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-                    throw new ClientException("Invalid hub.topic $feed; user doesn't exist.");
+                    // TRANS: Client exception.
+                    throw new ClientException(sprintt(_m('Invalid hub.topic "%s". User doesn\'t exist.'),$feed));
                 } else {
                     return true;
                 }
@@ -166,8 +166,8 @@ class PushHubAction extends Action
             if ($feed == $groupFeed) {
                 $user = User_group::staticGet('id', $id);
                 if (!$user) {
-                    // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-                    throw new ClientException("Invalid hub.topic $feed; group doesn't exist.");
+                    // TRANS: Client exception.
+                    throw new ClientException(sprintf(_m('Invalid hub.topic "%s". Group doesn\'t exist.'),$feed));
                 } else {
                     return true;
                 }
@@ -190,8 +190,9 @@ class PushHubAction extends Action
         if (Validate::uri($url, $params)) {
             return $url;
         } else {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new ClientException("Invalid URL passed for $arg: '$url'");
+            // TRANS: Client exception.
+            // TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL.
+            throw new ClientException(sprintf(_m('Invalid URL passed for %1$s: "%2$s"'),$arg,$url));
         }
     }
 
index 06a72bf0244331be868a790eb38b6bd3f7697ae3..e78c653300da11dd504afa0e21aa1a63badda4c2 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/**
- * @package OStatusPlugin
- * @author James Walker <james@status.net>
- */
-
 if (!defined('STATUSNET')) {
     exit(1);
 }
 
+/**
+ * @package OStatusPlugin
+ * @author James Walker <james@status.net>
+ */
 class UsersalmonAction extends SalmonAction
 {
     function prepare($args)
@@ -35,13 +34,13 @@ class UsersalmonAction extends SalmonAction
         $id = $this->trimmed('id');
 
         if (!$id) {
-            $this->clientError(_('No ID.'));
+            $this->clientError(_m('No ID.'));
         }
 
         $this->user = User::staticGet('id', $id);
 
         if (empty($this->user)) {
-            $this->clientError(_('No such user.'));
+            $this->clientError(_m('No such user.'));
         }
 
         return true;
@@ -78,20 +77,24 @@ class UsersalmonAction extends SalmonAction
         if (!empty($context->replyToID)) {
             $notice = Notice::staticGet('uri', $context->replyToID);
             if (empty($notice)) {
-                throw new ClientException("In reply to unknown notice");
+                // TRANS: Client exception.
+                throw new ClientException(_m('In reply to unknown notice.'));
             }
             if ($notice->profile_id != $this->user->id &&
                 !in_array($this->user->id, $notice->getReplies())) {
-                throw new ClientException("In reply to a notice not by this user and not mentioning this user");
+                // TRANS: Client exception.
+                throw new ClientException(_m('In reply to a notice not by this user and not mentioning this user.'));
             }
         } else if (!empty($context->attention)) {
             if (!in_array($this->user->uri, $context->attention) &&
                 !in_array(common_profile_url($this->user->nickname), $context->attention)) {
                 common_log(LOG_ERR, "{$this->user->uri} not in attention list (".implode(',', $context->attention).")");
-                throw new ClientException("To the attention of user(s) not including this one!");
+                // TRANS: Client exception.
+                throw new ClientException('To the attention of user(s), not including this one.');
             }
         } else {
-            throw new ClientException("Not to anyone in reply to anything!");
+            // TRANS: Client exception.
+            throw new ClientException('Not to anyone in reply to anything.');
         }
 
         $existing = Notice::staticGet('uri', $this->activity->objects[0]->id);
@@ -108,7 +111,6 @@ class UsersalmonAction extends SalmonAction
      * We've gotten a follow/subscribe notification from a remote user.
      * Save a subscription relationship for them.
      */
-
     function handleFollow()
     {
         $oprofile = $this->ensureProfile();
@@ -152,11 +154,13 @@ class UsersalmonAction extends SalmonAction
                                    'notice_id' => $notice->id));
 
         if (!empty($old)) {
-            throw new ClientException("We already know that's a fave!");
+            // TRANS: Client exception.
+            throw new ClientException(_('This is already a favorite.'));
         }
 
         if (!Fave::addNew($profile, $notice)) {
-            throw new ClientException("Could not save new favorite.");
+           // TRANS: Client exception.
+           throw new ClientException(_m('Could not save new favorite.'));
         }
     }
 
@@ -172,7 +176,8 @@ class UsersalmonAction extends SalmonAction
         $fave = Fave::pkeyGet(array('user_id' => $profile->id,
                                    'notice_id' => $notice->id));
         if (empty($fave)) {
-            throw new ClientException("Notice wasn't favorited!");
+            // TRANS: Client exception.
+            throw new ClientException(_('Notice wasn\'t favorited!'));
         }
 
         $fave->delete();
@@ -186,7 +191,8 @@ class UsersalmonAction extends SalmonAction
     function getNotice($object)
     {
         if (!$object) {
-            throw new ClientException("Can't favorite/unfavorite without an object.");
+            // TRANS: Client exception.
+            throw new ClientException(_m('Can\'t favorite/unfavorite without an object.'));
         }
 
         switch ($object->type) {
@@ -197,20 +203,22 @@ class UsersalmonAction extends SalmonAction
         case ActivityObject::COMMENT:
             break;
         default:
-            throw new ClientException("Can't handle that kind of object for liking/faving.");
+            // TRANS: Client exception.
+            throw new ClientException(_m('Can\'t handle that kind of object for liking/faving.'));
         }
 
         $notice = Notice::staticGet('uri', $object->id);
 
         if (empty($notice)) {
-            throw new ClientException("Notice with ID $object->id unknown.");
+            // TRANS: Client exception. %s is an object ID.
+            throw new ClientException(sprintf(_m('Notice with ID %s unknown.'),$object->id));
         }
 
         if ($notice->profile_id != $this->user->id) {
-            throw new ClientException("Notice with ID $object->id not posted by $this->user->id.");
+            // TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID.
+            throw new ClientException(sprintf(_m('Notice with ID %1$s not posted by %2$s.'),$object->id,$this->user->id));
         }
 
         return $notice;
     }
-
 }
index dd720568b49ae318211e5ba5210c17511ee80522..9aa7c0306de1f2de17c9903b7c6f352917f49c6e 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+if (!defined('STATUSNET')) { exit(1); }
+
 /**
  * @package OStatusPlugin
  * @maintainer James Walker <james@status.net>
  */
-
-if (!defined('STATUSNET')) { exit(1); }
-
 class UserxrdAction extends XrdAction
 {
-
     function prepare($args)
     {
         parent::prepare($args);
@@ -46,7 +44,7 @@ class UserxrdAction extends XrdAction
             $this->user = User::staticGet('uri', $this->uri);
         }
         if (!$this->user) {
-            $this->clientError(_('No such user.'), 404);
+            $this->clientError(_m('No such user.'), 404);
             return false;
         }
 
index 6f9e0856ab1aeb821b8927e43dbd412710c4eb33..58beec673836460912729c9b70e091c8c072ac51 100644 (file)
@@ -39,7 +39,6 @@ PuSH subscription flow:
         hub sends us updates via POST
 
 */
-
 class FeedDBException extends FeedSubException
 {
     public $obj;
@@ -88,7 +87,6 @@ class FeedSub extends Memcached_DataObject
      *
      * @return array array of column definitions
      */
-
     function table()
     {
         return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
@@ -143,7 +141,6 @@ class FeedSub extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keys()
     {
         return array_keys($this->keyTypes());
@@ -157,7 +154,6 @@ class FeedSub extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keyTypes()
     {
         return array('id' => 'K', 'uri' => 'U');
@@ -249,7 +245,7 @@ class FeedSub extends Memcached_DataObject
                 // We'll never actually get updates in this mode.
                 return true;
             } else {
-                throw new ServerException("Attempting to start PuSH subscription for feed with no hub.");
+                throw new ServerException(_m('Attempting to start PuSH subscription for feed with no hub.'));
             }
         }
 
@@ -279,7 +275,7 @@ class FeedSub extends Memcached_DataObject
                 // We'll never actually get updates in this mode.
                 return true;
             } else {
-                throw new ServerException("Attempting to end PuSH subscription for feed with no hub.");
+                throw new ServerException(_m('Attempting to end PuSH subscription for feed with no hub.'));
             }
         }
 
@@ -500,5 +496,4 @@ class FeedSub extends Memcached_DataObject
         }
         return false;
     }
-
 }
index e01ae4e798d8190f1461f3db2081fa89ec7b3db7..825d36ebd64c656367a79c9a64bb1d686b04e53f 100644 (file)
@@ -54,7 +54,6 @@ class HubSub extends Memcached_DataObject
      *
      * @return array array of column definitions
      */
-
     function table()
     {
         return array('hashkey' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
@@ -112,7 +111,6 @@ class HubSub extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keyTypes()
     {
         return array('hashkey' => 'K');
@@ -206,8 +204,8 @@ class HubSub extends Memcached_DataObject
         if ($status >= 200 && $status < 300) {
             common_log(LOG_INFO, "Verified $mode of $this->callback:$this->topic");
         } else {
-            // @todo i18n FIXME: add i18n and use sprintf for parameter.
-            throw new ClientException("Hub subscriber verification returned HTTP $status");
+            // TRANS: Client exception. %s is a HTTP status code.
+            throw new ClientException(sprintf(_m('Hub subscriber verification returned HTTP %s.'),$status));
         }
 
         $old = HubSub::staticGet($this->topic, $this->callback);
@@ -353,10 +351,9 @@ class HubSub extends Memcached_DataObject
         if ($response->isOk()) {
             return true;
         } else {
-            throw new Exception("Callback returned status: " .
-                                $response->getStatus() .
-                                "; body: " .
-                                trim($response->getBody()));
+            // TRANS: Exception. %1$s is a response status code, %2$s is the body of the response.
+            throw new Exception(sprintf(_m('Callback returned status: %1$s. Body: %2$s'),
+                                $response->getStatus(),trim($response->getBody())));
         }
     }
 }
index e39a6d8f7ce01280c66a2f470ac1154e6734116f..20025c37a6a8c0e3a8aa7ba9afa80d4c778b8e3d 100644 (file)
@@ -31,7 +31,6 @@ require_once 'Crypt/RSA.php';
 
 class Magicsig extends Memcached_DataObject
 {
-
     const PUBLICKEYREL = 'magic-public-key';
 
     public $__table = 'magicsig';
@@ -86,7 +85,6 @@ class Magicsig extends Memcached_DataObject
                                    64, false));
     }
 
-
     function keys()
     {
         return array_keys($this->keyTypes());
@@ -126,7 +124,6 @@ class Magicsig extends Memcached_DataObject
         $this->insert();
     }
 
-
     public function toString($full_pair = true)
     {
         $mod = Magicsig::base64_url_encode($this->publicKey->modulus->toBytes());
@@ -197,7 +194,6 @@ class Magicsig extends Memcached_DataObject
         case 'RSA-SHA256':
             return 'sha256';
         }
-
     }
 
     public function sign($bytes)
index 19fe5169b4f19b32dbcb112f538745b28d17d159..402d1967f9a3b612935507860bc5fa78795d1369 100644 (file)
@@ -21,7 +21,6 @@
  * @package OStatusPlugin
  * @maintainer Brion Vibber <brion@status.net>
  */
-
 class Ostatus_profile extends Memcached_DataObject
 {
     public $__table = 'ostatus_profile';
@@ -51,7 +50,6 @@ class Ostatus_profile extends Memcached_DataObject
      *
      * @return array array of column definitions
      */
-
     function table()
     {
         return array('uri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
@@ -92,7 +90,6 @@ class Ostatus_profile extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keys()
     {
         return array_keys($this->keyTypes());
@@ -106,7 +103,6 @@ class Ostatus_profile extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keyTypes()
     {
         return array('uri' => 'K', 'profile_id' => 'U', 'group_id' => 'U', 'feeduri' => 'U');
@@ -188,11 +184,11 @@ class Ostatus_profile extends Memcached_DataObject
         } else if ($this->group_id && !$this->profile_id) {
             return true;
         } else if ($this->group_id && $this->profile_id) {
-            // @todo i18n FIXME: use sprintf and add i18n.
-            throw new ServerException("Invalid ostatus_profile state: both group and profile IDs set for $this->uri.");
+            // TRANS: Server exception.
+            throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs set for %s.'),$this->uri));
         } else {
-            // @todo i18n FIXME: use sprintf and add i18n.
-            throw new ServerException("Invalid ostatus_profile state: both group and profile IDs empty for $this->uri.");
+            // TRANS: Server exception.
+            throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs empty for %s.'),$this->uri));
         }
     }
 
@@ -280,7 +276,9 @@ class Ostatus_profile extends Memcached_DataObject
             if ($type == 'object') {
                 $type = get_class($actor);
             }
-            throw new ServerException("Invalid actor passed to " . __METHOD__ . ": " . $type);
+            // TRANS: Server exception.
+            // TRANS: %1$s is the method name the exception occured in, %2$s is the actor type.
+            throw new ServerException(sprintf(_m('Invalid actor passed to %1$s: %2$s.'),__METHOD__,$type));
         }
         if ($object == null) {
             $object = $this;
@@ -372,8 +370,8 @@ class Ostatus_profile extends Memcached_DataObject
         } else if ($entry instanceof Notice) {
             return $preamble . $entry->asAtomEntry(true, true);
         } else {
-            // @todo i18n FIXME: use sprintf and add i18n.
-            throw new ServerException("Invalid type passed to Ostatus_profile::notify; must be XML string or Activity entry.");
+            // TRANS: Server exception.
+            throw new ServerException(_m('Invalid type passed to Ostatus_profile::notify. It must be XML string or Activity entry.'));
         }
     }
 
@@ -403,7 +401,7 @@ class Ostatus_profile extends Memcached_DataObject
         } else if ($feed->localName == 'rss') { // @fixme check namespace
             $this->processRssFeed($feed, $source);
         } else {
-            throw new Exception("Unknown feed format.");
+            throw new Exception(_m('Unknown feed format.'));
         }
     }
 
@@ -426,7 +424,7 @@ class Ostatus_profile extends Memcached_DataObject
         $channels = $rss->getElementsByTagName('channel');
 
         if ($channels->length == 0) {
-            throw new Exception("RSS feed without a channel.");
+            throw new Exception(_m('RSS feed without a channel.'));
         } else if ($channels->length > 1) {
             common_log(LOG_WARNING, __METHOD__ . ": more than one channel in an RSS feed");
         }
@@ -470,7 +468,8 @@ class Ostatus_profile extends Memcached_DataObject
                 }
                 break;
             default:
-                throw new ClientException("Can't handle that kind of post.");
+                // TRANS: Client exception.
+                throw new ClientException(_m('Can\'t handle that kind of post.'));
             }
 
             Event::handle('EndHandleFeedEntry', array($activity));
@@ -552,8 +551,8 @@ class Ostatus_profile extends Memcached_DataObject
             $sourceContent = $note->title;
         } else {
             // @fixme fetch from $sourceUrl?
-            // @todo i18n FIXME: use sprintf and add i18n.
-            throw new ClientException("No content for notice {$sourceUri}.");
+            // TRANS: Client exception. %s is a source URL.
+            throw new ClientException(sprintf(_m('No content for notice %s.'),$sourceUri));
         }
 
         // Get (safe!) HTML and text versions of the content
@@ -584,14 +583,17 @@ class Ostatus_profile extends Memcached_DataObject
 
                 // We mark up the attachment link specially for the HTML output
                 // so we can fold-out the full version inline.
+
+                // TRANS: Shown when a notice is longer than supported and/or when attachments are present.
+                $showMoreText = _m('Show more');
                 $attachUrl = common_local_url('attachment',
                                               array('attachment' => $attachment->id));
                 $rendered = common_render_text($shortSummary) .
                             '<a href="' . htmlspecialchars($attachUrl) .'"'.
                             ' class="attachment more"' .
-                            ' title="'. htmlspecialchars(_m('Show more')) . '">' .
+                            ' title="'. htmlspecialchars($showMoreText) . '">' .
                             '&#8230;' .
-                            '</a>'; // @todo i18n FIXME: add translator hint/context.
+                            '</a>';
             }
         }
 
@@ -703,23 +705,7 @@ class Ostatus_profile extends Memcached_DataObject
                 continue;
             }
 
-            // Is the recipient a remote group?
-            $oprofile = Ostatus_profile::ensureProfileURI($recipient);
-
-            if ($oprofile) {
-                if ($oprofile->isGroup()) {
-                    // Deliver to local members of this remote group.
-                    // @fixme sender verification?
-                    $groups[] = $oprofile->group_id;
-                } else {
-                    // may be canonicalized or something
-                    $replies[] = $oprofile->uri;
-                }
-                continue;
-            }
-
             // Is the recipient a local group?
-            // @fixme uri on user_group isn't reliable yet
             // $group = User_group::staticGet('uri', $recipient);
             $id = OStatusPlugin::localGroupFromUrl($recipient);
             if ($id) {
@@ -738,7 +724,22 @@ class Ostatus_profile extends Memcached_DataObject
                 }
             }
 
-            common_log(LOG_DEBUG, "Skipping reply to unrecognized profile $recipient");
+            // Is the recipient a remote user or group?
+            try {
+                $oprofile = Ostatus_profile::ensureProfileURI($recipient);
+                if ($oprofile->isGroup()) {
+                    // Deliver to local members of this remote group.
+                    // @fixme sender verification?
+                    $groups[] = $oprofile->group_id;
+                } else {
+                    // may be canonicalized or something
+                    $replies[] = $oprofile->uri;
+                }
+                continue;
+            } catch (Exception $e) {
+                // Neither a recognizable local nor remote user!
+                common_log(LOG_DEBUG, "Skipping reply to unrecognized profile $recipient: " . $e->getMessage());
+            }
 
         }
         $attention_uris = $replies;
@@ -776,8 +777,8 @@ class Ostatus_profile extends Memcached_DataObject
         $response = $client->get($profile_url);
 
         if (!$response->isOk()) {
-            // @todo i18n FIXME: use sprintf and add i18n.
-            throw new Exception("Could not reach profile page: " . $profile_url);
+            // TRANS: Exception. %s is a profile URL.
+            throw new Exception(sprintf(_m('Could not reach profile page %s.'),$profile_url));
         }
 
         // Check if we have a non-canonical URL
@@ -834,8 +835,8 @@ class Ostatus_profile extends Memcached_DataObject
             return self::ensureFeedURL($feedurl, $hints);
         }
 
-        // @todo i18n FIXME: use sprintf and add i18n.
-        throw new Exception("Could not find a feed URL for profile page " . $finalUrl);
+        // TRANS: Exception.
+        throw new Exception(sprintf(_m('Could not find a feed URL for profile page %s.'),$finalUrl));
     }
 
     /**
@@ -867,7 +868,7 @@ class Ostatus_profile extends Memcached_DataObject
         $user = User::staticGet('id', $profile->id);
 
         if (!empty($user)) {
-            // @todo i18n FIXME: use sprintf and add i18n.
+            // @todo i18n FIXME: use sprintf and add i18n (?)
             throw new OStatusShadowException($profile, "'$profile_url' is the profile for local user '{$user->nickname}'.");
         }
 
@@ -972,8 +973,7 @@ class Ostatus_profile extends Memcached_DataObject
         }
 
         // XXX: make some educated guesses here
-
-        throw new FeedSubException("Can't find enough profile information to make a feed.");
+        throw new FeedSubException(_m('Can\'t find enough profile information to make a feed.'));
     }
 
     /**
@@ -1271,13 +1271,13 @@ class Ostatus_profile extends Memcached_DataObject
 
         $user = User::staticGet('uri', $homeuri);
         if ($user) {
-            // @todo i18n FIXME: add i18n.
-            throw new Exception("Local user can't be referenced as remote.");
+            // TRANS: Exception.
+            throw new Exception(_m('Local user can\'t be referenced as remote.'));
         }
 
         if (OStatusPlugin::localGroupFromUrl($homeuri)) {
-            // @todo i18n FIXME: add i18n.
-            throw new Exception("Local group can't be referenced as remote.");
+            // TRANS: Exception.
+            throw new Exception(_m('Local group can\'t be referenced as remote.'));
         }
 
         if (array_key_exists('feedurl', $hints)) {
@@ -1328,8 +1328,8 @@ class Ostatus_profile extends Memcached_DataObject
 
             $oprofile->profile_id = $profile->insert();
             if (!$oprofile->profile_id) {
-                // @todo i18n FIXME: add i18n.
-                throw new ServerException("Can't save local profile.");
+            // TRANS: Exception.
+                throw new ServerException(_m('Can\'t save local profile.'));
             }
         } else {
             $group = new User_group();
@@ -1339,16 +1339,16 @@ class Ostatus_profile extends Memcached_DataObject
 
             $oprofile->group_id = $group->insert();
             if (!$oprofile->group_id) {
-                // @todo i18n FIXME: add i18n.
-                throw new ServerException("Can't save local profile.");
+                // TRANS: Exception.
+                throw new ServerException(_m('Can\'t save local profile.'));
             }
         }
 
         $ok = $oprofile->insert();
 
         if (!$ok) {
-            // @todo i18n FIXME: add i18n.
-            throw new ServerException("Can't save OStatus profile.");
+            // TRANS: Exception.
+            throw new ServerException(_m('Can\'t save OStatus profile.'));
         }
 
         $avatar = self::getActivityObjectAvatar($object, $hints);
@@ -1606,8 +1606,8 @@ class Ostatus_profile extends Memcached_DataObject
         if ($uri !== false) {
             if (is_null($uri)) {
                 // Negative cache entry
-                // @todo i18n FIXME: add i18n.
-                throw new Exception('Not a valid webfinger address.');
+                // TRANS: Exception.
+                throw new Exception(_m('Not a valid webfinger address.'));
             }
             $oprofile = Ostatus_profile::staticGet('uri', $uri);
             if (!empty($oprofile)) {
@@ -1634,8 +1634,8 @@ class Ostatus_profile extends Memcached_DataObject
             // Save negative cache entry so we don't waste time looking it up again.
             // @fixme distinguish temporary failures?
             self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), null);
-            // @todo i18n FIXME: add i18n.
-            throw new Exception('Not a valid webfinger address.');
+                // TRANS: Exception.
+            throw new Exception(_m('Not a valid webfinger address.'));
         }
 
         $hints = array('webfinger' => $addr);
@@ -1716,8 +1716,8 @@ class Ostatus_profile extends Memcached_DataObject
 
             if (!$profile_id) {
                 common_log_db_error($profile, 'INSERT', __FILE__);
-                // @todo i18n FIXME: add i18n and use sprintf for parameter.
-                throw new Exception("Couldn't save profile for '$addr'.");
+                // TRANS: Exception. %s is a webfinger address.
+                throw new Exception(sprintf(_m('Couldn\'t save profile for "%s".'),$addr));
             }
 
             $oprofile = new Ostatus_profile();
@@ -1735,16 +1735,16 @@ class Ostatus_profile extends Memcached_DataObject
 
             if (!$result) {
                 common_log_db_error($oprofile, 'INSERT', __FILE__);
-                // @todo i18n FIXME: add i18n and use sprintf for parameter.
-                throw new Exception("Couldn't save ostatus_profile for '$addr'.");
+                // TRANS: Exception. %s is a webfinger address.
+                throw new Exception(sprintf(_m('Couldn\'t save ostatus_profile for "%s".'),$addr));
             }
 
             self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
             return $oprofile;
         }
 
-        // @todo i18n FIXME: add i18n and use sprintf for parameter.
-        throw new Exception("Couldn't find a valid profile for '$addr'");
+        // TRANS: Exception. %s is a webfinger address.
+        throw new Exception(sprintf(_m('Couldn\'t find a valid profile for "%s".'),$addr));
     }
 
     /**
@@ -1786,7 +1786,7 @@ class Ostatus_profile extends Memcached_DataObject
 
         if ($file_id === false) {
             common_log_db_error($file, "INSERT", __FILE__);
-            throw new ServerException(_('Could not store HTML content of long post as file.'));
+            throw new ServerException(_m('Could not store HTML content of long post as file.'));
         }
 
         return $file;
index e6ce7d442bc0914f1c371608ab0a1a7ec9b59f0c..b76bbce56ceb35e33ca3823b30086961d8a2cd17 100644 (file)
@@ -21,7 +21,6 @@
  * @package OStatusPlugin
  * @maintainer Brion Vibber <brion@status.net>
  */
-
 class Ostatus_source extends Memcached_DataObject
 {
     public $__table = 'ostatus_source';
@@ -43,7 +42,6 @@ class Ostatus_source extends Memcached_DataObject
      *
      * @return array array of column definitions
      */
-
     function table()
     {
         return array('notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
@@ -69,7 +67,6 @@ class Ostatus_source extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keys()
     {
         return array_keys($this->keyTypes());
@@ -83,7 +80,6 @@ class Ostatus_source extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keyTypes()
     {
         return array('notice_id' => 'K');
index 04c672720757107f588cb4b935580a4ed7866450..905ece2ca5a7cbff169c894beadced6abd1c710e 100644 (file)
@@ -106,8 +106,8 @@ class Discovery
             }
         }
 
-        // @todo Needs i18n.
-        throw new Exception('Unable to find services for '. $id . '.');
+        // TRANS: Exception.
+        throw new Exception(sprintf(_m('Unable to find services for %s.'),$id));
     }
 
     public static function getService($links, $service) {
index fa2ead7320cb8640b7c9c108b52756273c053c30..a98f4a6d672af976c8882242321dd57f4f0e1b8d 100644 (file)
@@ -20,7 +20,6 @@
  */
 
 class DiscoveryHints {
-
     static function fromXRD($xrd)
     {
         $hints = array();
index cd78d31cef6ce325c4e1959f1dae391c562e0855..efa3f65ff37a2b86781477c0bea2c5130354bca8 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+/**
+ * @todo Add file header and documentation.
+ */
 
 class LinkHeader
 {
index bbd4ce17a24f69e172f1fa5c14ffaa21d9a6d819..03e6f7c665426b2ff013ea2c34b18dd2f4b36980 100644 (file)
@@ -76,7 +76,8 @@ class MagicEnvelope
                 }
             }
         }
-        throw new Exception('Unable to locate signer public key.');
+        // TRANS: Exception.
+        throw new Exception(_m('Unable to locate signer public key.'));
     }
 
 
@@ -92,7 +93,6 @@ class MagicEnvelope
             'sig' => $signature_alg->sign($armored_text),
             'alg' => $signature_alg->getName()
         );
-
     }
 
     public function toXML($env) {
@@ -110,7 +110,6 @@ class MagicEnvelope
         return $string;
     }
 
-
     public function unfold($env)
     {
         $dom = new DOMDocument();
@@ -218,5 +217,4 @@ class MagicEnvelope
             'sig' => preg_replace('/\s/', '', $sig_element->nodeValue),
         );
     }
-
 }
index 9814cab9f18d99fe4ff34e4811a82c22fa1baae0..5e0ab46a5b842657afd760b04226141f36e15e44 100644 (file)
@@ -221,5 +221,4 @@ class OStatusQueueHandler extends QueueHandler
 
         return $feed;
     }
-
 }
index 1fd29ae301b9203595016b4210550260507efde8..965d042668b461c7b97a18751d2e9601efa41b8c 100644 (file)
@@ -22,7 +22,6 @@
  * @package FeedSub
  * @author Brion Vibber <brion@status.net>
  */
-
 class PushInQueueHandler extends QueueHandler
 {
     function transport()
index 631ebc7d86b350db77bda77f2b1d9473940c4c2d..963da650840ecf869fe1bc868779f3ad67d1508a 100644 (file)
@@ -89,8 +89,8 @@ class Salmon
                 $magickey->generate($user->id);
             }
         } else {
-            // @todo i18n FIXME: added i18n and use sprintf when using parameters.
-            throw new Exception("Salmon invalid actor for signing.");
+            // TRANS: Exception.
+            throw new Exception(_m('Salmon invalid actor for signing.'));
         }
 
         try {
@@ -101,7 +101,6 @@ class Salmon
         return $magic_env->toXML($env);
     }
 
-
     public function verifyMagicEnv($text)
     {
         $magic_env = new MagicEnvelope();
index f97c67edd0dfd152b6e66f48e6df0dffbe46fff5..41bdb489284a75072682c3351f7f748995682711 100644 (file)
@@ -38,11 +38,12 @@ class SalmonAction extends Action
         parent::prepare($args);
 
         if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-            // TRANS: POST is a HTTP command. It should not be translated.
+            // TRANS: Client error. POST is a HTTP command. It should not be translated.
             $this->clientError(_m('This method requires a POST.'));
         }
 
         if (empty($_SERVER['CONTENT_TYPE']) || $_SERVER['CONTENT_TYPE'] != 'application/magic-envelope+xml') {
+            // TRANS: Client error. Do not translate "application/magic-envelope+xml"
             $this->clientError(_m('Salmon requires "application/magic-envelope+xml".'));
         }
 
@@ -52,6 +53,7 @@ class SalmonAction extends Action
         $salmon = new Salmon;
         if (!$salmon->verifyMagicEnv($xml)) {
             common_log(LOG_DEBUG, "Salmon signature verification failed.");
+            // TRANS: Client error.
             $this->clientError(_m('Salmon signature verification failed.'));
         } else {
             $magic_env = new MagicEnvelope();
@@ -63,6 +65,7 @@ class SalmonAction extends Action
         if ($dom->documentElement->namespaceURI != Activity::ATOM ||
             $dom->documentElement->localName != 'entry') {
             common_log(LOG_DEBUG, "Got invalid Salmon post: $xml");
+            // TRANS: Client error.
             $this->clientError(_m('Salmon post must be an Atom entry.'));
         }
 
@@ -111,6 +114,7 @@ class SalmonAction extends Action
                 $this->handleUpdateProfile();
                 break;
             default:
+                // TRANS: Client exception.
                 throw new ClientException(_m("Unrecognized activity type."));
             }
             Event::handle('EndHandleSalmon', array($this->activity));
@@ -119,41 +123,49 @@ class SalmonAction extends Action
 
     function handlePost()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand posts."));
     }
 
     function handleFollow()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand follows."));
     }
 
     function handleUnfollow()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand unfollows."));
     }
 
     function handleFavorite()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand favorites."));
     }
 
     function handleUnfavorite()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand unfavorites."));
     }
 
     function handleShare()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand share events."));
     }
 
     function handleJoin()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand joins."));
     }
 
     function handleLeave()
     {
+        // TRANS: Client exception.
         throw new ClientException(_m("This target doesn't understand leave events."));
     }
 
@@ -181,7 +193,8 @@ class SalmonAction extends Action
         if (empty($actor->id)) {
             common_log(LOG_ERR, "broken actor: " . var_export($actor, true));
             common_log(LOG_ERR, "activity with no actor: " . var_export($this->activity, true));
-            throw new Exception("Received a salmon slap from unidentified actor.");
+            // TRANS: Exception.
+            throw new Exception(_m('Received a salmon slap from unidentified actor.'));
         }
 
         return Ostatus_profile::ensureActivityObjectProfile($actor);
index 145cd64cb4e92ddb42d5fd77b8e8b6a81c1ab562..c8cffed9cde255fd14decbb0d68c2353fcfee748 100644 (file)
@@ -27,7 +27,6 @@
  * @link      http://status.net/
  */
 
-
 class XRD
 {
     const XML_NS = 'http://www.w3.org/2000/xmlns/';
@@ -61,11 +60,13 @@ class XRD
         error_reporting($old);
 
         if (!$ok) {
-            throw new Exception("Invalid XML.");
+            // TRANS: Exception.
+            throw new Exception(_m('Invalid XML.'));
         }
         $xrd_element = $dom->getElementsByTagName('XRD')->item(0);
         if (!$xrd_element) {
-            throw new Exception("Invalid XML, missing XRD root.");
+            // TRANS: Exception.
+            throw new Exception(_m('Invalid XML, missing XRD root.'));
         }
 
         // Check for host-meta host
index 91bb87cc2306c5880ab2f845c834d11bf54ad202..c8b5beff379732d7bee653324071558e9035ffd2 100644 (file)
@@ -103,5 +103,4 @@ class XrdAction extends Action
         header('Content-type: application/xrd+xml');
         print $xrd->toXML();
     }
-
 }
index 3dc6fd6ade2788baf12c6f8cae905a3e7cf7c9ab..882e8d308097d77b37b6d4f0b45680e6bb6d499a 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-19 15:29+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,61 +16,183 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: OStatusPlugin.php:226 OStatusPlugin.php:951 actions/ostatusinit.php:99
+#. TRANS: Link description for link to subscribe to a remote user.
+#. TRANS: Link text for a user to subscribe to an OStatus user.
+#: OStatusPlugin.php:227 OStatusPlugin.php:958
 msgid "Subscribe"
 msgstr ""
 
-#: OStatusPlugin.php:244 OStatusPlugin.php:663 actions/ostatussub.php:105
-#: actions/ostatusinit.php:96
+#. TRANS: Link description for link to join a remote group.
+#: OStatusPlugin.php:246 OStatusPlugin.php:667 actions/ostatussub.php:107
 msgid "Join"
 msgstr ""
 
-#: OStatusPlugin.php:456
+#. TRANSLATE: %s is a domain.
+#: OStatusPlugin.php:459
 #, php-format
 msgid "Sent from %s via OStatus"
 msgstr ""
 
-#: OStatusPlugin.php:527
+#. TRANS: Exception.
+#: OStatusPlugin.php:531
 msgid "Could not set up remote subscription."
 msgstr ""
 
-#: OStatusPlugin.php:647
+#: OStatusPlugin.php:570
+msgid "Follow"
+msgstr ""
+
+#. TRANS: Success message for subscribe to user attempt through OStatus.
+#. TRANS: %1$s is the subscriber name, %2$s is the subscribed user's name.
+#: OStatusPlugin.php:573
+#, php-format
+msgid "%1$s is now following %2$s."
+msgstr ""
+
+#: OStatusPlugin.php:620
+msgid "Unfollow"
+msgstr ""
+
+#. TRANS: Success message for unsubscribe from user attempt through OStatus.
+#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
+#: OStatusPlugin.php:623
+#, php-format
+msgid "%1$s stopped following %2$s."
+msgstr ""
+
+#: OStatusPlugin.php:651
 msgid "Could not set up remote group membership."
 msgstr ""
 
-#: OStatusPlugin.php:674
+#. TRANS: Exception.
+#: OStatusPlugin.php:679
 msgid "Failed joining remote group."
 msgstr ""
 
-#: OStatusPlugin.php:714
+#: OStatusPlugin.php:719
 msgid "Leave"
 msgstr ""
 
-#: OStatusPlugin.php:880
+#: OStatusPlugin.php:760
+msgid "Favor"
+msgstr ""
+
+#. TRANS: Success message for adding a favorite notice through OStatus.
+#. TRANS: %1$s is the favoring user's name, %2$s is URI to the favored notice.
+#: OStatusPlugin.php:763
+#, php-format
+msgid "%1$s marked notice %2$s as a favorite."
+msgstr ""
+
+#: OStatusPlugin.php:806
+msgid "Disfavor"
+msgstr ""
+
+#. TRANS: Success message for remove a favorite notice through OStatus.
+#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
+#: OStatusPlugin.php:809
+#, php-format
+msgid "%1$s marked notice %2$s as no longer a favorite."
+msgstr ""
+
+#. TRANS: Link text for link to remote subscribe.
+#: OStatusPlugin.php:885
 msgid "Remote"
 msgstr ""
 
-#: OStatusPlugin.php:919
+#. TRANS: Title for activity.
+#: OStatusPlugin.php:925
 msgid "Profile update"
 msgstr ""
 
 #. TRANS: Ping text for remote profile update through OStatus.
 #. TRANS: %s is user that updated their profile.
-#: OStatusPlugin.php:922
+#: OStatusPlugin.php:928
 #, php-format
 msgid "%s has updated their profile page."
 msgstr ""
 
-#: OStatusPlugin.php:966
+#. TRANS: Plugin description.
+#: OStatusPlugin.php:973
 msgid ""
 "Follow people across social networks that implement <a href=\"http://ostatus."
 "org/\">OStatus</a>."
 msgstr ""
 
-#: classes/Ostatus_profile.php:592
+#: classes/FeedSub.php:248
+msgid "Attempting to start PuSH subscription for feed with no hub."
+msgstr ""
+
+#: classes/FeedSub.php:278
+msgid "Attempting to end PuSH subscription for feed with no hub."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:188
+#, php-format
+msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:191
+#, php-format
+msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
+msgstr ""
+
+#. TRANS: Server exception.
+#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type.
+#: classes/Ostatus_profile.php:281
+#, php-format
+msgid "Invalid actor passed to %1$s: %2$s."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:374
+msgid ""
+"Invalid type passed to Ostatus_profile::notify. It must be XML string or "
+"Activity entry."
+msgstr ""
+
+#: classes/Ostatus_profile.php:404
+msgid "Unknown feed format."
+msgstr ""
+
+#: classes/Ostatus_profile.php:427
+msgid "RSS feed without a channel."
+msgstr ""
+
+#. TRANS: Client exception.
+#: classes/Ostatus_profile.php:472
+msgid "Can't handle that kind of post."
+msgstr ""
+
+#. TRANS: Client exception. %s is a source URL.
+#: classes/Ostatus_profile.php:555
+#, php-format
+msgid "No content for notice %s."
+msgstr ""
+
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present.
+#: classes/Ostatus_profile.php:588
 msgid "Show more"
 msgstr ""
 
+#. TRANS: Exception. %s is a profile URL.
+#: classes/Ostatus_profile.php:781
+#, php-format
+msgid "Could not reach profile page %s."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:839
+#, php-format
+msgid "Could not find a feed URL for profile page %s."
+msgstr ""
+
+#: classes/Ostatus_profile.php:976
+msgid "Can't find enough profile information to make a feed."
+msgstr ""
+
 #: classes/Ostatus_profile.php:1035
 #, php-format
 msgid "Invalid avatar URL %s."
@@ -86,239 +208,554 @@ msgstr ""
 msgid "Unable to fetch avatar from %s."
 msgstr ""
 
-#. TRANS: POST is a HTTP command. It should not be translated.
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1275
+msgid "Local user can't be referenced as remote."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1280
+msgid "Local group can't be referenced as remote."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1332 classes/Ostatus_profile.php:1343
+msgid "Can't save local profile."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1351
+msgid "Can't save OStatus profile."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1610 classes/Ostatus_profile.php:1638
+msgid "Not a valid webfinger address."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1720
+#, php-format
+msgid "Couldn't save profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1739
+#, php-format
+msgid "Couldn't save ostatus_profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1747
+#, php-format
+msgid "Couldn't find a valid profile for \"%s\"."
+msgstr ""
+
+#: classes/Ostatus_profile.php:1789
+msgid "Could not store HTML content of long post as file."
+msgstr ""
+
+#. TRANS: Client exception. %s is a HTTP status code.
+#: classes/HubSub.php:208
+#, php-format
+msgid "Hub subscriber verification returned HTTP %s."
+msgstr ""
+
+#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response.
+#: classes/HubSub.php:355
+#, php-format
+msgid "Callback returned status: %1$s. Body: %2$s"
+msgstr ""
+
+#. TRANS: Client error. POST is a HTTP command. It should not be translated.
 #: lib/salmonaction.php:42
 msgid "This method requires a POST."
 msgstr ""
 
-#: lib/salmonaction.php:46
+#. TRANS: Client error. Do not translate "application/magic-envelope+xml"
+#: lib/salmonaction.php:47
 msgid "Salmon requires \"application/magic-envelope+xml\"."
 msgstr ""
 
-#: lib/salmonaction.php:55
+#. TRANS: Client error.
+#: lib/salmonaction.php:57
 msgid "Salmon signature verification failed."
 msgstr ""
 
-#: lib/salmonaction.php:66
+#. TRANS: Client error.
+#: lib/salmonaction.php:69
 msgid "Salmon post must be an Atom entry."
 msgstr ""
 
-#: lib/salmonaction.php:114
+#. TRANS: Client exception.
+#: lib/salmonaction.php:118
 msgid "Unrecognized activity type."
 msgstr ""
 
-#: lib/salmonaction.php:122
+#. TRANS: Client exception.
+#: lib/salmonaction.php:127
 msgid "This target doesn't understand posts."
 msgstr ""
 
-#: lib/salmonaction.php:127
+#. TRANS: Client exception.
+#: lib/salmonaction.php:133
 msgid "This target doesn't understand follows."
 msgstr ""
 
-#: lib/salmonaction.php:132
+#. TRANS: Client exception.
+#: lib/salmonaction.php:139
 msgid "This target doesn't understand unfollows."
 msgstr ""
 
-#: lib/salmonaction.php:137
+#. TRANS: Client exception.
+#: lib/salmonaction.php:145
 msgid "This target doesn't understand favorites."
 msgstr ""
 
-#: lib/salmonaction.php:142
+#. TRANS: Client exception.
+#: lib/salmonaction.php:151
 msgid "This target doesn't understand unfavorites."
 msgstr ""
 
-#: lib/salmonaction.php:147
+#. TRANS: Client exception.
+#: lib/salmonaction.php:157
 msgid "This target doesn't understand share events."
 msgstr ""
 
-#: lib/salmonaction.php:152
+#. TRANS: Client exception.
+#: lib/salmonaction.php:163
 msgid "This target doesn't understand joins."
 msgstr ""
 
-#: lib/salmonaction.php:157
+#. TRANS: Client exception.
+#: lib/salmonaction.php:169
 msgid "This target doesn't understand leave events."
 msgstr ""
 
+#. TRANS: Exception.
+#: lib/salmonaction.php:197
+msgid "Received a salmon slap from unidentified actor."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/discovery.php:110
+#, php-format
+msgid "Unable to find services for %s."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/xrd.php:64
+msgid "Invalid XML."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/xrd.php:69
+msgid "Invalid XML, missing XRD root."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/magicenvelope.php:80
+msgid "Unable to locate signer public key."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/salmon.php:93
+msgid "Salmon invalid actor for signing."
+msgstr ""
+
 #: tests/gettext-speedtest.php:57
 msgid "Feeds"
 msgstr ""
 
-#: actions/ostatusgroup.php:75
+#. TRANS: Client exception.
+#: actions/pushhub.php:66
+msgid "Publishing outside feeds not supported."
+msgstr ""
+
+#. TRANS: Client exception. %s is a mode.
+#: actions/pushhub.php:69
+#, php-format
+msgid "Unrecognized mode \"%s\"."
+msgstr ""
+
+#. TRANS: Client exception. %s is a topic.
+#: actions/pushhub.php:89
+#, php-format
+msgid ""
+"Unsupported hub.topic %s this hub only serves local user and group Atom "
+"feeds."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:95
+#, php-format
+msgid "Invalid hub.verify \"%s\". It must be sync or async."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:101
+#, php-format
+msgid "Invalid hub.lease \"%s\". It must be empty or positive integer."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:109
+#, php-format
+msgid "Invalid hub.secret \"%s\". It must be under 200 bytes."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:161
+#, php-format
+msgid "Invalid hub.topic \"%s\". User doesn't exist."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:170
+#, php-format
+msgid "Invalid hub.topic \"%s\". Group doesn't exist."
+msgstr ""
+
+#. TRANS: Client exception.
+#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL.
+#: actions/pushhub.php:195
+#, php-format
+msgid "Invalid URL passed for %1$s: \"%2$s\""
+msgstr ""
+
+#: actions/userxrd.php:47 actions/ownerxrd.php:37 actions/usersalmon.php:43
+msgid "No such user."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/usersalmon.php:37 actions/groupsalmon.php:40
+msgid "No ID."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:81
+msgid "In reply to unknown notice."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:86
+msgid "In reply to a notice not by this user and not mentioning this user."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:163
+msgid "Could not save new favorite."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:195
+msgid "Can't favorite/unfavorite without an object."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:207
+msgid "Can't handle that kind of object for liking/faving."
+msgstr ""
+
+#. TRANS: Client exception. %s is an object ID.
+#: actions/usersalmon.php:214
+#, php-format
+msgid "Notice with ID %s unknown."
+msgstr ""
+
+#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID.
+#: actions/usersalmon.php:219
+#, php-format
+msgid "Notice with ID %1$s not posted by %2$s."
+msgstr ""
+
+#. TRANS: Field label.
+#: actions/ostatusgroup.php:76
 msgid "Join group"
 msgstr ""
 
-#: actions/ostatusgroup.php:77
+#. TRANS: Tooltip for field label "Join group".
+#: actions/ostatusgroup.php:79
 msgid "OStatus group's address, like http://example.net/group/nickname."
 msgstr ""
 
-#: actions/ostatusgroup.php:81 actions/ostatussub.php:71
+#. TRANS: Button text.
+#: actions/ostatusgroup.php:84 actions/ostatussub.php:73
+msgctxt "BUTTON"
 msgid "Continue"
 msgstr ""
 
-#: actions/ostatusgroup.php:100
+#: actions/ostatusgroup.php:103
 msgid "You are already a member of this group."
 msgstr ""
 
 #. TRANS: OStatus remote group subscription dialog error.
-#: actions/ostatusgroup.php:135
+#: actions/ostatusgroup.php:138
 msgid "Already a member!"
 msgstr ""
 
 #. TRANS: OStatus remote group subscription dialog error.
-#: actions/ostatusgroup.php:146
+#: actions/ostatusgroup.php:149
 msgid "Remote group join failed!"
 msgstr ""
 
 #. TRANS: OStatus remote group subscription dialog error.
-#: actions/ostatusgroup.php:150
+#: actions/ostatusgroup.php:153
 msgid "Remote group join aborted!"
 msgstr ""
 
 #. TRANS: Page title for OStatus remote group join form
-#: actions/ostatusgroup.php:163
+#: actions/ostatusgroup.php:165
 msgid "Confirm joining remote group"
 msgstr ""
 
-#: actions/ostatusgroup.php:174
+#. TRANS: Instructions.
+#: actions/ostatusgroup.php:176
 msgid ""
 "You can subscribe to groups from other supported sites. Paste the group's "
 "profile URI below:"
 msgstr ""
 
-#: actions/groupsalmon.php:51
+#. TRANS: Client error.
+#: actions/groupsalmon.php:47
+msgid "No such group."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:53
 msgid "Can't accept remote posts for a remote group."
 msgstr ""
 
-#: actions/groupsalmon.php:124
+#. TRANS: Client error.
+#: actions/groupsalmon.php:127
 msgid "Can't read profile to set up group membership."
 msgstr ""
 
-#: actions/groupsalmon.php:127 actions/groupsalmon.php:170
+#. TRANS: Client error.
+#: actions/groupsalmon.php:131 actions/groupsalmon.php:174
 msgid "Groups can't join groups."
 msgstr ""
 
-#: actions/groupsalmon.php:154
+#: actions/groupsalmon.php:144
+msgid "You have been blocked from that group by the admin."
+msgstr ""
+
+#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
+#: actions/groupsalmon.php:159
 #, php-format
 msgid "Could not join remote user %1$s to group %2$s."
 msgstr ""
 
-#: actions/groupsalmon.php:167
+#: actions/groupsalmon.php:171
 msgid "Can't read profile to cancel group membership."
 msgstr ""
 
-#: actions/groupsalmon.php:183
+#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
+#: actions/groupsalmon.php:188
 #, php-format
 msgid "Could not remove remote user %1$s from group %2$s."
 msgstr ""
 
-#: actions/ostatussub.php:65
+#. TRANS: Field label for a field that takes an OStatus user address.
+#: actions/ostatussub.php:66
 msgid "Subscribe to"
 msgstr ""
 
-#: actions/ostatussub.php:67
+#. TRANS: Tooltip for field label "Subscribe to".
+#: actions/ostatussub.php:69
 msgid ""
 "OStatus user's address, like nickname@example.com or http://example.net/"
 "nickname"
 msgstr ""
 
-#: actions/ostatussub.php:106
+#. TRANS: Button text.
+#. TRANS: Tooltip for button "Join".
+#: actions/ostatussub.php:110
+msgctxt "BUTTON"
 msgid "Join this group"
 msgstr ""
 
-#. TRANS: Page title for OStatus remote subscription form
-#: actions/ostatussub.php:108 actions/ostatussub.php:400
+#. TRANS: Button text.
+#: actions/ostatussub.php:113
+msgctxt "BUTTON"
 msgid "Confirm"
 msgstr ""
 
-#: actions/ostatussub.php:109
+#. TRANS: Tooltip for button "Confirm".
+#: actions/ostatussub.php:115
 msgid "Subscribe to this user"
 msgstr ""
 
-#: actions/ostatussub.php:130
+#: actions/ostatussub.php:136
 msgid "You are already subscribed to this user."
 msgstr ""
 
-#: actions/ostatussub.php:247 actions/ostatussub.php:253
-#: actions/ostatussub.php:272
+#: actions/ostatussub.php:165
+msgid "Photo"
+msgstr ""
+
+#: actions/ostatussub.php:176
+msgid "Nickname"
+msgstr ""
+
+#: actions/ostatussub.php:197
+msgid "Location"
+msgstr ""
+
+#: actions/ostatussub.php:206
+msgid "URL"
+msgstr ""
+
+#: actions/ostatussub.php:218
+msgid "Note"
+msgstr ""
+
+#. TRANS: Error text.
+#: actions/ostatussub.php:254 actions/ostatussub.php:261
+#: actions/ostatussub.php:286
 msgid ""
 "Sorry, we could not reach that address. Please make sure that the OStatus "
 "address is like nickname@example.com or http://example.net/nickname."
 msgstr ""
 
-#: actions/ostatussub.php:256 actions/ostatussub.php:259
-#: actions/ostatussub.php:262 actions/ostatussub.php:265
-#: actions/ostatussub.php:268
+#. TRANS: Error text.
+#: actions/ostatussub.php:265 actions/ostatussub.php:269
+#: actions/ostatussub.php:273 actions/ostatussub.php:277
+#: actions/ostatussub.php:281
 msgid ""
 "Sorry, we could not reach that feed. Please try that OStatus address again "
 "later."
 msgstr ""
 
 #. TRANS: OStatus remote subscription dialog error.
-#: actions/ostatussub.php:301
+#: actions/ostatussub.php:315
 msgid "Already subscribed!"
 msgstr ""
 
 #. TRANS: OStatus remote subscription dialog error.
-#: actions/ostatussub.php:306
+#: actions/ostatussub.php:320
 msgid "Remote subscription failed!"
 msgstr ""
 
-#: actions/ostatussub.php:380 actions/ostatusinit.php:81
+#: actions/ostatussub.php:367 actions/ostatusinit.php:63
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#. TRANS: Form title.
+#: actions/ostatussub.php:395 actions/ostatusinit.php:82
 msgid "Subscribe to user"
 msgstr ""
 
-#: actions/ostatussub.php:411
+#. TRANS: Page title for OStatus remote subscription form
+#: actions/ostatussub.php:415
+msgid "Confirm"
+msgstr ""
+
+#. TRANS: Instructions.
+#: actions/ostatussub.php:427
 msgid ""
 "You can subscribe to users from other supported sites. Paste their address "
 "or profile URI below:"
 msgstr ""
 
+#. TRANS: Client error.
 #: actions/ostatusinit.php:41
 msgid "You can use the local subscription!"
 msgstr ""
 
-#: actions/ostatusinit.php:63
-msgid "There was a problem with your session token. Try again, please."
-msgstr ""
-
-#: actions/ostatusinit.php:95
+#. TRANS: Form legend.
+#: actions/ostatusinit.php:97
 #, php-format
 msgid "Join group %s"
 msgstr ""
 
-#: actions/ostatusinit.php:98
+#. TRANS: Button text.
+#: actions/ostatusinit.php:99
+msgctxt "BUTTON"
+msgid "Join"
+msgstr ""
+
+#. TRANS: Form legend.
+#: actions/ostatusinit.php:102
 #, php-format
 msgid "Subscribe to %s"
 msgstr ""
 
-#: actions/ostatusinit.php:111
+#. TRANS: Button text.
+#: actions/ostatusinit.php:104
+msgctxt "BUTTON"
+msgid "Subscribe"
+msgstr ""
+
+#. TRANS: Field label.
+#: actions/ostatusinit.php:117
 msgid "User nickname"
 msgstr ""
 
-#: actions/ostatusinit.php:112
+#: actions/ostatusinit.php:118
 msgid "Nickname of the user you want to follow."
 msgstr ""
 
-#: actions/ostatusinit.php:116
+#. TRANS: Field label.
+#: actions/ostatusinit.php:123
 msgid "Profile Account"
 msgstr ""
 
-#: actions/ostatusinit.php:117
+#. TRANS: Tooltip for field label "Profile Account".
+#: actions/ostatusinit.php:125
 msgid "Your account id (e.g. user@identi.ca)."
 msgstr ""
 
-#: actions/ostatusinit.php:138
+#. TRANS: Client error.
+#: actions/ostatusinit.php:147
 msgid "Must provide a remote profile."
 msgstr ""
 
-#: actions/ostatusinit.php:149
+#. TRANS: Client error.
+#: actions/ostatusinit.php:159
 msgid "Couldn't look up OStatus account profile."
 msgstr ""
 
-#: actions/ostatusinit.php:161
+#. TRANS: Client error.
+#: actions/ostatusinit.php:172
 msgid "Couldn't confirm remote profile address."
 msgstr ""
 
-#: actions/ostatusinit.php:202
+#. TRANS: Page title.
+#: actions/ostatusinit.php:217
 msgid "OStatus Connect"
 msgstr ""
+
+#: actions/pushcallback.php:48
+msgid "Empty or invalid feed id."
+msgstr ""
+
+#. TRANS: Server exception. %s is a feed ID.
+#: actions/pushcallback.php:54
+#, php-format
+msgid "Unknown PuSH feed id %s"
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid feed name.
+#: actions/pushcallback.php:93
+#, php-format
+msgid "Bad hub.topic feed \"%s\"."
+msgstr ""
+
+#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given.
+#: actions/pushcallback.php:98
+#, php-format
+msgid "Bad hub.verify_token %1$s for %2$s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:105
+#, php-format
+msgid "Unexpected subscribe request for %s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:110
+#, php-format
+msgid "Unexpected unsubscribe request for %s."
+msgstr ""
index c2c9a5d97b5c05276a58e263590c74b42dc4718f..64c60a8a4cd76d2f5d619d72a2aa40af04bde905 100644 (file)
@@ -4,6 +4,8 @@ if (php_sapi_name() != 'cli') {
     die('not for web');
 }
 
+define('TIMEOUT', 60); // ssslllloowwwww salmon if queues are off
+
 define('INSTALLDIR', dirname(dirname(dirname(dirname(__FILE__)))));
 set_include_path(INSTALLDIR . '/extlib' . PATH_SEPARATOR . get_include_path());
 
@@ -188,7 +190,7 @@ class SNTestClient extends TestBase
     {
         $url = $this->basepath . '/' . $path;
 
-        $http = new HTTP_Request2($url, 'POST');
+        $http = new HTTP_Request2($url, 'POST', array('timeout' => TIMEOUT));
         if ($auth) {
             $http->setAuth($this->username, $this->password, HTTP_Request2::AUTH_BASIC);
         }
@@ -215,7 +217,7 @@ class SNTestClient extends TestBase
     protected function web($path, $form, $params=array())
     {
         $url = $this->basepath . '/' . $path;
-        $http = new HTTP_Request2($url, 'GET');
+        $http = new HTTP_Request2($url, 'GET', array('timeout' => TIMEOUT));
         $response = $http->send();
 
         $dom = $this->checkWeb($url, 'GET', $response);
index 6756f19930f1f07041fc146cd04d79ec3b7e2494..611f5e5c7b1e54a1a4fde8bc795679b1fb1a9a99 100644 (file)
@@ -57,8 +57,7 @@ class OpenExternalLinkTargetPlugin extends Plugin
                             'author' => 'Sarven Capadisli',
                             'homepage' => 'http://status.net/wiki/Plugin:OpenExternalLinkTarget',
                             'rawdescription' =>
-                            _m('Opens external links (i.e., with rel=external) on a new window or tab'));
+                            _m('Opens external links (e.g., with rel=external) on a new window or tab.'));
         return true;
     }
 }
-
index 2fbe4cfa2bffbebdeda48169b30a433caa492e69..4ceaddf1871560579af68df98a1e29b5134ee0ed 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -17,5 +17,5 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 #: OpenExternalLinkTargetPlugin.php:60
-msgid "Opens external links (i.e., with rel=external) on a new window or tab"
+msgid "Opens external links (e.g., with rel=external) on a new window or tab."
 msgstr ""
index 0a84e060da3ce87d88704ff19e38753cbe067893..033eab320bfb26ca7fc0de12b06996401a14bec5 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
diff --git a/plugins/PiwikAnalytics/PiwikAnalyticsPlugin.php b/plugins/PiwikAnalytics/PiwikAnalyticsPlugin.php
new file mode 100644 (file)
index 0000000..777fd9c
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to use Piwik Analytics
+ *
+ * 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  Plugin
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Tobias Diekershoff <tobias.diekershoff@gmx.net>
+ * @copyright 2008 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);
+}
+
+/**
+ * Plugin to use Piwik Analytics (based on the Google Analytics plugin by Evan)
+ *
+ * This plugin will spoot out the correct JavaScript spell to invoke
+ * Piwik Analytics on a page.
+ *
+ * To use this plugin add the following to your config.php
+ *
+ *  addPlugin('PiwikAnalytics', array('piwikroot' => 'example.com/piwik/',
+ *                                    'piwikId' => 'id'));
+ *
+ * Replace 'example.com/piwik/' with the URL to your Piwik installation and
+ * make sure you don't forget the final /.
+ * Replace 'id' with the ID your statusnet installation has in your Piwik
+ * analytics setup - for example '8'.
+ *
+ */
+class PiwikAnalyticsPlugin extends Plugin
+{
+    /** the base of your Piwik installation */
+    public $piwikroot = null;
+    /** the Piwik Id of your statusnet installation */
+    public $piwikId   = null;
+
+    /**
+     * constructor
+     *
+     * @param string $root Piwik root URL
+     * @param string $id   Piwik ID of this app
+     */
+    function __construct($root=null, $id=null)
+    {
+        $this->piwikroot = $root;
+        $this->piwikId   = $id;
+        parent::__construct();
+    }
+
+    /**
+     * Called when all scripts have been shown
+     *
+     * @param Action $action Current action
+     *
+     * @return boolean ignored
+     */
+    function onEndShowScripts($action)
+    {
+        $piwikCode1 = <<<ENDOFPIWIK
+var pkBaseURL = (("https:" == document.location.protocol) ? "https://{$this->piwikroot}" : "http://{$this->piwikroot}");
+document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ENDOFPIWIK;
+        $piwikCode2 = <<<ENDOFPIWIK
+try {
+    var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {$this->piwikId});
+    piwikTracker.trackPageView();
+    piwikTracker.enableLinkTracking();
+} catch( err ) {}
+ENDOFPIWIK;
+
+        $action->inlineScript($piwikCode1);
+        $action->inlineScript($piwikCode2);
+        return true;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'PiwikAnalytics',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Tobias Diekershoff, Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:Piwik',
+                            'rawdescription' =>
+                            _m('Use <a href="http://piwik.org/">Piwik</a> Open Source web analytics software.'));
+        return true;
+    }
+}
diff --git a/plugins/PiwikAnalytics/locale/PiwikAnalytics.pot b/plugins/PiwikAnalytics/locale/PiwikAnalytics.pot
new file mode 100644 (file)
index 0000000..2afaaaa
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-19 15:29+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: PiwikAnalyticsPlugin.php:105
+msgid ""
+"Use <a href=\"http://piwik.org/\">Piwik</a> Open Source web analytics "
+"software."
+msgstr ""
diff --git a/plugins/PiwikAnalyticsPlugin.php b/plugins/PiwikAnalyticsPlugin.php
deleted file mode 100644 (file)
index b353d72..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to use Piwik Analytics
- *
- * 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  Plugin
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @author    Tobias Diekershoff <tobias.diekershoff@gmx.net>
- * @copyright 2008 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);
-}
-
-/**
- * Plugin to use Piwik Analytics (based on the Google Analytics plugin by Evan)
- *
- * This plugin will spoot out the correct JavaScript spell to invoke
- * Piwik Analytics on a page.
- *
- * To use this plugin add the following to your config.php
- *
- *  addPlugin('PiwikAnalytics', array('piwikroot' => 'example.com/piwik/',
- *                                    'piwikId' => 'id'));
- *
- * Replace 'example.com/piwik/' with the URL to your Piwik installation and
- * make sure you don't forget the final /.
- * Replace 'id' with the ID your statusnet installation has in your Piwik
- * analytics setup - for example '8'.
- *
- */
-
-class PiwikAnalyticsPlugin extends Plugin
-{
-    /** the base of your Piwik installation */
-    public $piwikroot = null;
-    /** the Piwik Id of your statusnet installation */
-    public $piwikId   = null;
-
-    /**
-     * constructor
-     *
-     * @param string $root Piwik root URL
-     * @param string $id   Piwik ID of this app
-     */
-
-    function __construct($root=null, $id=null)
-    {
-        $this->piwikroot = $root;
-        $this->piwikId   = $id;
-        parent::__construct();
-    }
-
-    /**
-     * Called when all scripts have been shown
-     *
-     * @param Action $action Current action
-     *
-     * @return boolean ignored
-     */
-
-    function onEndShowScripts($action)
-    {
-        $piwikCode1 = <<<ENDOFPIWIK
-var pkBaseURL = (("https:" == document.location.protocol) ? "https://{$this->piwikroot}" : "http://{$this->piwikroot}");
-document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
-ENDOFPIWIK;
-        $piwikCode2 = <<<ENDOFPIWIK
-try {
-    var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {$this->piwikId});
-    piwikTracker.trackPageView();
-    piwikTracker.enableLinkTracking();
-} catch( err ) {}
-ENDOFPIWIK;
-
-        $action->inlineScript($piwikCode1);
-        $action->inlineScript($piwikCode2);
-        return true;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'PiwikAnalytics',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Tobias Diekershoff, Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:Piwik',
-                            'rawdescription' =>
-                            _m('Use <a href="http://piwik.org/">Piwik</a> Open Source Web analytics software.'));
-        return true;
-    }
-
-}
index 0e9d7680363678ccf8b0ab4a10e19b22f5a0bf2a..1d67b751049f7783bf3e8d1268b1446cc29f2db6 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index fb4eff73894c0791aa37d6de96379a051ba58782..f2e2fcbafe0ab0082edddcc7f2cb9f555aed1ef4 100644 (file)
@@ -47,6 +47,7 @@ class PoweredByStatusNetPlugin extends Plugin
     {
         $action->text(' ');
         $action->elementStart('span', 'poweredby');
+        // TRANS: %s is a URL to status.net with "StatusNet" (localised) as link text.
         $action->raw(sprintf(_m('powered by %s'),
                      sprintf('<a href="http://status.net/">%s</a>',
                              _m('StatusNet'))));
@@ -62,7 +63,7 @@ class PoweredByStatusNetPlugin extends Plugin
                             'author' => 'Sarven Capadisli',
                             'homepage' => 'http://status.net/wiki/Plugin:PoweredByStatusNet',
                             'rawdescription' =>
-                            _m('Outputs powered by <a href="http://status.net/">StatusNet</a> after site name.'));
+                            _m('Outputs "powered by <a href="http://status.net/">StatusNet</a>" after site name.'));
         return true;
     }
 }
index 1997cc04a2867580cffc48ecd9bb6a59984b1dbf..77c1822c426c84077f9cc2b2745e8a618068b89f 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,17 +16,18 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: PoweredByStatusNetPlugin.php:50
+#. TRANS: %s is a URL to status.net with "StatusNet" (localised) as link text.
+#: PoweredByStatusNetPlugin.php:51
 #, php-format
 msgid "powered by %s"
 msgstr ""
 
-#: PoweredByStatusNetPlugin.php:52
+#: PoweredByStatusNetPlugin.php:53
 msgid "StatusNet"
 msgstr ""
 
-#: PoweredByStatusNetPlugin.php:65
+#: PoweredByStatusNetPlugin.php:66
 msgid ""
-"Outputs powered by <a href=\"http://status.net/\">StatusNet</a> after site "
-"name."
+"Outputs \"powered by <a href=\"http://status.net/\">StatusNet</a>\" after "
+"site name."
 msgstr ""
index b2f5947af9e6a890735d8eecae9fd8001f1610a0..c7a8b0667709eec2ec902242b9890372c00f0152 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index e37eed16a3dc5508a3cafa7273319680a4fa0f1e..c7d7a40e3bb0a7e973464a6f5158d0ce73e7f6e5 100644 (file)
@@ -47,7 +47,6 @@ if (!defined('STATUSNET')) {
  **/
 class LoggingAggregatorAction extends Action
 {
-
     var $challenge = null;
     var $url       = null;
 
@@ -58,7 +57,6 @@ class LoggingAggregatorAction extends Action
      *
      * @return boolean false if user doesn't exist
      */
-
     function prepare($args)
     {
         parent::prepare($args);
@@ -79,22 +77,20 @@ class LoggingAggregatorAction extends Action
      *
      * @return void
      */
-
     function handle($args)
     {
         parent::handle($args);
 
         if (empty($this->url)) {
-            $this->showError('Hey, you have to provide a url parameter.');
+            $this->showError(_('A URL parameter is required.'));
             return;
         }
 
         if (!empty($this->challenge)) {
 
             // must be a GET
-
             if ($_SERVER['REQUEST_METHOD'] != 'GET') {
-                $this->showError('This resource requires an HTTP GET.');
+                $this->showError(_m('This resource requires an HTTP GET.'));
                 return;
             }
 
@@ -104,9 +100,8 @@ class LoggingAggregatorAction extends Action
         } else {
 
             // must be a POST
-
             if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-                $this->showError('This resource requires an HTTP POST.');
+                $this->showError(_m('This resource requires an HTTP POST.'));
                 return;
             }
 
@@ -128,7 +123,6 @@ class LoggingAggregatorAction extends Action
      *
      * @return void
      */
-
     function showError($msg)
     {
         header('HTTP/1.1 400 Bad Request');
@@ -136,5 +130,4 @@ class LoggingAggregatorAction extends Action
         echo "<?xml version='1.0'?>\n";
         echo "<notifyResult success='false' msg='$msg' />\n";
     }
-
-}
\ No newline at end of file
+}
index 9e7b53680381c43930ebb781a6643ff3ea400bba..1f0eab47e8049c343a7e07fee221354af5928a75 100644 (file)
@@ -235,6 +235,4 @@ class RSSCloudNotifier
             }
         }
     }
-
 }
-
index c1951cdbf856b31931ae83d6cb82fcf9c61b1e20..bba0be515d4e068959656e023e784b6c7cfde18c 100644 (file)
@@ -247,10 +247,9 @@ class RSSCloudPlugin extends Plugin
                             'rawdescription' =>
                             _m('The RSSCloud plugin enables your StatusNet instance to publish ' .
                                'real-time updates for profile RSS feeds using the ' .
-                               '<a href="http://rsscloud.org/">RSSCloud protocol</a>".'));
+                               '<a href="http://rsscloud.org/">RSSCloud protocol</a>.'));
 
         return true;
     }
 
 }
-
index ef11eda2e78ae3be1fd8a09e59f19471011fae49..8a09977489b3d463d41f0b14d1568470ae532b81 100644 (file)
@@ -38,4 +38,3 @@ class RSSCloudQueueHandler extends QueueHandler
         return $notifier->notify($profile);
     }
 }
-
index 03052953486e9da683c030855da8182ce00b2508..e9c0eab5f881e6a4ed6046806e9fdcd5ce34c17c 100644 (file)
@@ -41,7 +41,6 @@ if (!defined('STATUSNET')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  **/
-
 class RSSCloudRequestNotifyAction extends Action
 {
     /**
@@ -51,7 +50,6 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return boolean false if user doesn't exist
      */
-
     function prepare($args)
     {
         parent::prepare($args);
@@ -84,13 +82,12 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return void
      */
-
     function handle($args)
     {
         parent::handle($args);
 
         if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-            $this->showResult(false, 'Request must be POST.');
+            $this->showResult(false, _m('Request must be POST.'));
             return;
         }
 
@@ -107,7 +104,7 @@ class RSSCloudRequestNotifyAction extends Action
         if (empty($this->protocol)) {
             $missing[] = 'protocol';
         } else if (strtolower($this->protocol) != 'http-post') {
-            $msg = 'Only http-post notifications are supported at this time.';
+            $msg = _m('Only http-post notifications are supported at this time.');
             $this->showResult(false, $msg);
             return;
         }
@@ -117,15 +114,15 @@ class RSSCloudRequestNotifyAction extends Action
         }
 
         if (!empty($missing)) {
-            $msg = 'The following parameters were missing from the request body: ' .
-                implode(', ', $missing) . '.';
+            // TRANS: %s is a comma separated list of parameters.
+            $msg = sprintf(_m('The following parameters were missing from the request body: %s.'),implode(', ', $missing));
             $this->showResult(false, $msg);
             return;
         }
 
         if (empty($this->feeds)) {
-            $msg = 'You must provide at least one valid profile feed url ' .
-              '(url1, url2, url3 ... urlN).';
+            $msg = _m('You must provide at least one valid profile feed url ' .
+              '(url1, url2, url3 ... urlN).');
             $this->showResult(false, $msg);
             return;
         }
@@ -133,7 +130,6 @@ class RSSCloudRequestNotifyAction extends Action
         // We have to validate everything before saving anything.
         // We only return one success or failure no matter how
         // many feeds the subscriber is trying to subscribe to
-
         foreach ($this->feeds as $feed) {
 
             if (!$this->validateFeed($feed)) {
@@ -142,18 +138,17 @@ class RSSCloudRequestNotifyAction extends Action
                 common_log(LOG_WARNING,
                            "RSSCloud plugin - $nh tried to subscribe to invalid feed: $feed");
 
-                $msg = 'Feed subscription failed - Not a valid feed.';
+                $msg = _m('Feed subscription failed: Not a valid feed.');
                 $this->showResult(false, $msg);
                 return;
             }
 
             if (!$this->testNotificationHandler($feed)) {
-                $msg = 'Feed subscription failed - ' .
-                'notification handler doesn\'t respond correctly.';
+                $msg = _m('Feed subscription failed - ' .
+                'notification handler doesn\'t respond correctly.');
                 $this->showResult(false, $msg);
                 return;
             }
-
         }
 
         foreach ($this->feeds as $feed) {
@@ -163,9 +158,8 @@ class RSSCloudRequestNotifyAction extends Action
         // XXX: What to do about deleting stale subscriptions?
         // 25 hours seems harsh. WordPress doesn't ever remove
         // subscriptions.
-
-        $msg = 'Thanks for the subscription. ' .
-          'When the feed(s) update(s) we\'ll notify you.';
+        $msg = _m('Thanks for the subscription. ' .
+          'When the feed(s) update(s), you will be notified.');
 
         $this->showResult(true, $msg);
     }
@@ -178,7 +172,6 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return void
      */
-
     function validateFeed($feed)
     {
         $user = $this->userFromFeed($feed);
@@ -196,7 +189,6 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return array $feeds the list of feeds
      */
-
     function getFeeds()
     {
         $feeds = array();
@@ -218,7 +210,6 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return boolean success result
      */
-
     function testNotificationHandler($feed)
     {
         $notifyUrl = $this->getNotifyUrl();
@@ -226,9 +217,7 @@ class RSSCloudRequestNotifyAction extends Action
         $notifier = new RSSCloudNotifier();
 
         if (isset($this->domain)) {
-
             // 'domain' param set, so we have to use GET and send a challenge
-
             common_log(LOG_INFO,
                        'RSSCloud plugin - Testing notification handler with challenge: ' .
                        $notifyUrl);
@@ -248,7 +237,6 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return string notification handler url
      */
-
     function getNotifyUrl()
     {
         if (isset($this->domain)) {
@@ -267,12 +255,10 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return boolean success
      */
-
     function userFromFeed($feed)
     {
         // We only do canonical RSS2 profile feeds (specified by ID), e.g.:
         // http://www.example.com/api/statuses/user_timeline/2.rss
-
         $path  = common_path('api/statuses/user_timeline/');
         $valid = '%^' . $path . '(?<id>.*)\.rss$%';
 
@@ -293,7 +279,6 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return boolean success result
      */
-
     function saveSubscription($feed)
     {
         $user = $this->userFromFeed($feed);
@@ -334,7 +319,6 @@ class RSSCloudRequestNotifyAction extends Action
      *
      * @return boolean success result
      */
-
     function showResult($success, $msg)
     {
         $this->startXML();
@@ -343,6 +327,4 @@ class RSSCloudRequestNotifyAction extends Action
                                   'msg'     => $msg));
         $this->endXML();
     }
-
 }
-
index 396c604e71ebdba0d4ee0e399d88fe292140f969..595af884468ac4aad7d441fe6dff8fd22dc25a96 100644 (file)
@@ -75,5 +75,4 @@ class RSSCloudSubscription extends Memcached_DataObject {
 
         return false;
     }
-
 }
index c7b28632b42b6423e8a114b58f613867323f9780..c91f21f336f0ddbecd4c0bb27757def31bef0a9a 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-19 15:29+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,9 +16,52 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: RSSCloudRequestNotify.php:90
+msgid "Request must be POST."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:107
+msgid "Only http-post notifications are supported at this time."
+msgstr ""
+
+#. TRANS: %s is a comma separated list of parameters.
+#: RSSCloudRequestNotify.php:118
+#, php-format
+msgid "The following parameters were missing from the request body: %s."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:124
+msgid ""
+"You must provide at least one valid profile feed url (url1, url2, url3 ... "
+"urlN)."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:141
+msgid "Feed subscription failed: Not a valid feed."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:147
+msgid ""
+"Feed subscription failed - notification handler doesn't respond correctly."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:161
+msgid ""
+"Thanks for the subscription. When the feed(s) update(s), you will be "
+"notified."
+msgstr ""
+
+#: LoggingAggregator.php:93
+msgid "This resource requires an HTTP GET."
+msgstr ""
+
+#: LoggingAggregator.php:104
+msgid "This resource requires an HTTP POST."
+msgstr ""
+
 #: RSSCloudPlugin.php:248
 msgid ""
 "The RSSCloud plugin enables your StatusNet instance to publish real-time "
 "updates for profile RSS feeds using the <a href=\"http://rsscloud.org/"
-"\">RSSCloud protocol</a>\"."
+"\">RSSCloud protocol</a>."
 msgstr ""
index 7cc34c56863dcf1702e036857fbe678a48b30124..0c46a33e0b0cea702326c436fce4283bf8525cad 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * StatusNet, the distributed open-source microblogging tool
  *
- * Plugin to show reCaptcha when a user registers 
+ * Plugin to show reCaptcha when a user registers
  *
  * PHP version 5
  *
@@ -61,14 +61,14 @@ class RecaptchaPlugin extends Plugin
     function onEndRegistrationFormData($action)
     {
         $action->elementStart('li');
-        $action->raw('<label for="recaptcha">Captcha</label>');
+        $action->raw('<label for="recaptcha">'._m('Captcha').'</label>');
 
         // AJAX API will fill this div out.
         // We're calling that instead of the regular one so we stay compatible
         // with application/xml+xhtml output as for mobile.
         $action->element('div', array('id' => 'recaptcha'));
         $action->elementEnd('li');
-        
+
         $action->recaptchaPluginNeedsOutput = true;
         return true;
     }
@@ -83,7 +83,7 @@ class RecaptchaPlugin extends Plugin
                 $url = "http://api.recaptcha.net/js/recaptcha_ajax.js";
             }
             $action->script($url);
-            
+
             // And when we're ready, fill out the captcha!
             $key = json_encode($this->public_key);
             $action->inlinescript("\$(function(){Recaptcha.create($key, 'recaptcha');});");
@@ -100,9 +100,9 @@ class RecaptchaPlugin extends Plugin
 
         if (!$resp->is_valid) {
             if($this->display_errors) {
-                $action->showForm ("(reCAPTCHA error: " . $resp->error . ")");
+                $action->showForm(sprintf(_("(reCAPTCHA error: %s)", $resp->error)));
             }
-            $action->showForm("Captcha does not match!");
+            $action->showForm(_m("Captcha does not match!"));
             return false;
         }
     }
index 855a1a11a308e4f2449e791d45459a6d16b1cd6f..547f73ba126f4f137bd83c7c6564b16428022d6a 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,6 +16,14 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: RecaptchaPlugin.php:64
+msgid "Captcha"
+msgstr ""
+
+#: RecaptchaPlugin.php:105
+msgid "Captcha does not match!"
+msgstr ""
+
 #: RecaptchaPlugin.php:117
 msgid ""
 "Uses <a href=\"http://recaptcha.org/\">Recaptcha</a> service to add a  "
index 05709b7807b2cc408d34168409b3cfb2d05ec3ee..b6e9a902653f5a49380bd7cc3540e0a3efc0ce3d 100644 (file)
@@ -113,7 +113,6 @@ class RegisterThrottlePlugin extends Plugin
      * @return boolean hook value
      *
      */
-
     function onStartRegistrationTry($action)
     {
         $ipaddress = $this->_getIpAddress();
@@ -134,7 +133,7 @@ class RegisterThrottlePlugin extends Plugin
                 $now     = time();
                 $this->debug("Comparing {$regtime} to {$now}");
                 if ($now - $regtime < $seconds) {
-                    throw new Exception(_("Too many registrations. Take a break and try again later."));
+                    throw new Exception(_m("Too many registrations. Take a break and try again later."));
                 }
             }
         }
@@ -197,7 +196,7 @@ class RegisterThrottlePlugin extends Plugin
                             'author' => 'Evan Prodromou',
                             'homepage' => 'http://status.net/wiki/Plugin:RegisterThrottle',
                             'description' =>
-                            _m('Throttles excessive registration from a single IP.'));
+                            _m('Throttles excessive registration from a single IP address.'));
         return true;
     }
 
index 7e61d089e7b072dbb1409aa02b13415ed2169fe5..5c7396b9b06ddb2e8935452b41a410f3378ec99d 100644 (file)
@@ -42,7 +42,6 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
  * @link     http://status.net/
  */
-
 class Registration_ip extends Memcached_DataObject
 {
     public $__table = 'registration_ip';     // table name
@@ -59,7 +58,6 @@ class Registration_ip extends Memcached_DataObject
      * @return User_greeting_count object found, or null for no hits
      *
      */
-
     function staticGet($k, $v=null)
     {
         return Memcached_DataObject::staticGet('Registration_ip', $k, $v);
@@ -70,7 +68,6 @@ class Registration_ip extends Memcached_DataObject
      *
      * @return array array of column definitions
      */
-
     function table()
     {
         return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
@@ -86,7 +83,6 @@ class Registration_ip extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keys()
     {
         return array('user_id' => 'K');
@@ -100,7 +96,6 @@ class Registration_ip extends Memcached_DataObject
      *
      * @return array key definitions
      */
-
     function keyTypes()
     {
         return $this->keys();
@@ -116,7 +111,6 @@ class Registration_ip extends Memcached_DataObject
      *
      * @return array magic three-false array that stops auto-incrementing.
      */
-
     function sequenceKey()
     {
         return array(false, false, false);
index 40327d16fe196f7a7f1d03f7c35641c7fb8f4dd6..97539f9a0dece1129343b40356b40ef16703739b 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,14 +16,18 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: RegisterThrottlePlugin.php:122 RegisterThrottlePlugin.php:161
+#: RegisterThrottlePlugin.php:121 RegisterThrottlePlugin.php:160
 msgid "Cannot find IP address."
 msgstr ""
 
-#: RegisterThrottlePlugin.php:167
+#: RegisterThrottlePlugin.php:136
+msgid "Too many registrations. Take a break and try again later."
+msgstr ""
+
+#: RegisterThrottlePlugin.php:166
 msgid "Cannot find user after successful registration."
 msgstr ""
 
-#: RegisterThrottlePlugin.php:200
-msgid "Throttles excessive registration from a single IP."
+#: RegisterThrottlePlugin.php:199
+msgid "Throttles excessive registration from a single IP address."
 msgstr ""
index af75b96e0b12002c313232f24c72cbccf116f6b0..719dba89cda520a7337b1bf8cc54c9c1f0e4f28b 100644 (file)
@@ -170,4 +170,3 @@ class RequireValidatedEmailPlugin extends Plugin
         return true;
     }
 }
-
index 13c04c338ae9db580a41b3468436a45ab55f24dd..f2128e79415f59415fe8064b13baf5feb8c3c30c 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:07+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"
index df2523cb41c9eef80bac31669238e8de91f0efb6..c0e66561cb158fad3b59480611ce1e5ae7c65e1f 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index 913741226b4302cd2c63bc09f439659fe9a89d68..ef69121a9986459b39840025917eb79d6e3d24e1 100644 (file)
@@ -101,7 +101,6 @@ if (!defined('STATUSNET')) {
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
  * @link      http://status.net/
  */
-
 class SamplePlugin extends Plugin
 {
     /**
@@ -129,7 +128,6 @@ class SamplePlugin extends Plugin
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-
     function initialize()
     {
         return true;
@@ -143,7 +141,6 @@ class SamplePlugin extends Plugin
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-
     function cleanup()
     {
         return true;
@@ -168,7 +165,6 @@ class SamplePlugin extends Plugin
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-
     function onCheckSchema()
     {
         $schema = Schema::get();
@@ -201,7 +197,6 @@ class SamplePlugin extends Plugin
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-
     function onAutoload($cls)
     {
         $dir = dirname(__FILE__);
@@ -231,7 +226,6 @@ class SamplePlugin extends Plugin
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-
     function onRouterInitialized($m)
     {
         $m->connect('main/hello',
@@ -256,7 +250,6 @@ class SamplePlugin extends Plugin
      *
      * @see Action
      */
-
     function onEndPrimaryNav($action)
     {
         // common_local_url() gets the correct URL for the action name
@@ -278,4 +271,3 @@ class SamplePlugin extends Plugin
         return true;
     }
 }
-
index fc0cbd28ff72a9e3b88d816efb5f57821e10d9a7..38d68c91ed35a473041874bc32d0c15cfa14048d 100644 (file)
@@ -70,7 +70,6 @@ class User_greeting_count extends Memcached_DataObject
      * @return User_greeting_count object found, or null for no hits
      *
      */
-
     function staticGet($k, $v=null)
     {
         return Memcached_DataObject::staticGet('User_greeting_count', $k, $v);
@@ -84,7 +83,6 @@ class User_greeting_count extends Memcached_DataObject
      *
      * @return array array of column definitions
      */
-
     function table()
     {
         return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
@@ -100,7 +98,6 @@ class User_greeting_count extends Memcached_DataObject
      *
      * @return array list of key field names
      */
-
     function keys()
     {
         return array_keys($this->keyTypes());
@@ -118,7 +115,6 @@ class User_greeting_count extends Memcached_DataObject
      *         'K' for primary key: for compound keys, add an entry for each component;
      *         'U' for unique keys: compound keys are not well supported here.
      */
-
     function keyTypes()
     {
         return array('user_id' => 'K');
@@ -134,7 +130,6 @@ class User_greeting_count extends Memcached_DataObject
      *
      * @return array magic three-false array that stops auto-incrementing.
      */
-
     function sequenceKey()
     {
         return array(false, false, false);
@@ -150,7 +145,6 @@ class User_greeting_count extends Memcached_DataObject
      *
      * @return User_greeting_count instance for this user, with count already incremented.
      */
-
     static function inc($user_id)
     {
         $gc = User_greeting_count::staticGet('user_id', $user_id);
@@ -165,12 +159,12 @@ class User_greeting_count extends Memcached_DataObject
             $result = $gc->insert();
 
             if (!$result) {
-                throw Exception(sprintf(_m("Could not save new greeting count for %d"),
+                // TRANS: Exception thrown when the user greeting count could not be saved in the database.
+                // TRANS: %d is a user ID (number).
+                throw Exception(sprintf(_m("Could not save new greeting count for %d."),
                                         $user_id));
             }
-
         } else {
-
             $orig = clone($gc);
 
             $gc->greeting_count++;
@@ -178,7 +172,9 @@ class User_greeting_count extends Memcached_DataObject
             $result = $gc->update($orig);
 
             if (!$result) {
-                throw Exception(sprintf(_m("Could not increment greeting count for %d"),
+                // TRANS: Exception thrown when the user greeting count could not be saved in the database.
+                // TRANS: %d is a user ID (number).
+                throw Exception(sprintf(_m("Could not increment greeting count for %d."),
                                         $user_id));
             }
         }
index dfbd0ad4f256ffa578a2a7cdde65a0e2cd4580de..a793ac6de2c98948a13c7268c7cad6312c85a446 100644 (file)
@@ -46,7 +46,6 @@ if (!defined('STATUSNET')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
  * @link     http://status.net/
  */
-
 class HelloAction extends Action
 {
     var $user = null;
@@ -67,7 +66,6 @@ class HelloAction extends Action
      *
      * @return boolean success flag
      */
-
     function prepare($args)
     {
         parent::prepare($args);
@@ -93,7 +91,6 @@ class HelloAction extends Action
      *
      * @return void
      */
-
     function handle($args)
     {
         parent::handle($args);
@@ -108,13 +105,12 @@ class HelloAction extends Action
      *
      * @return string Title of the page
      */
-
     function title()
     {
         if (empty($this->user)) {
             return _m('Hello');
         } else {
-            return sprintf(_m('Hello, %s'), $this->user->nickname);
+            return sprintf(_m('Hello, %s!'), $this->user->nickname);
         }
     }
 
@@ -130,7 +126,6 @@ class HelloAction extends Action
      *
      * @return void
      */
-
     function showContent()
     {
         if (empty($this->user)) {
@@ -162,7 +157,6 @@ class HelloAction extends Action
      *
      * @return boolean is read only action?
      */
-
     function isReadOnly($args)
     {
         return false;
index 66bcb775d99734f3c3c17e893e362470480b0ff2..b58819655b43316fac6acf977701ed72e4b41292 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -17,38 +17,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: User_greeting_count.php:168
+#. TRANS: Exception thrown when the user greeting count could not be saved in the database.
+#. TRANS: %d is a user ID (number).
+#: User_greeting_count.php:164
 #, php-format
-msgid "Could not save new greeting count for %d"
+msgid "Could not save new greeting count for %d."
 msgstr ""
 
-#: User_greeting_count.php:181
+#. TRANS: Exception thrown when the user greeting count could not be saved in the database.
+#. TRANS: %d is a user ID (number).
+#: User_greeting_count.php:177
 #, php-format
-msgid "Could not increment greeting count for %d"
+msgid "Could not increment greeting count for %d."
 msgstr ""
 
-#: SamplePlugin.php:266 hello.php:115
+#: SamplePlugin.php:259 hello.php:111
 msgid "Hello"
 msgstr ""
 
-#: SamplePlugin.php:266
+#: SamplePlugin.php:259
 msgid "A warm greeting"
 msgstr ""
 
-#: SamplePlugin.php:277
+#: SamplePlugin.php:270
 msgid "A sample plugin to show basics of development for new hackers."
 msgstr ""
 
-#: hello.php:117 hello.php:141
+#: hello.php:113
 #, php-format
-msgid "Hello, %s"
+msgid "Hello, %s!"
 msgstr ""
 
-#: hello.php:138
+#: hello.php:133
 msgid "Hello, stranger!"
 msgstr ""
 
-#: hello.php:143
+#: hello.php:136
+#, php-format
+msgid "Hello, %s"
+msgstr ""
+
+#: hello.php:138
 #, php-format
 msgid "I have greeted you %d time."
 msgid_plural "I have greeted you %d times."
index 7edf70abf9bf7b1f3c5530faa1a5ab0e1e42ae02..8fd5aa6bee0a6cc33bc62b168f6d45a1cf171faa 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
diff --git a/plugins/Spotify/SpotifyPlugin.php b/plugins/Spotify/SpotifyPlugin.php
new file mode 100644 (file)
index 0000000..e7a5a53
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+  *
+ * Plugin to create pretty Spotify URLs
+ *
+ * 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  Plugin
+ * @package   StatusNet
+ * @author    Nick Holliday <n.g.holliday@gmail.com>
+ * @copyright Nick Holliday
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ *
+ * @see      Event
+ */
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+define('SPOTIFYPLUGIN_VERSION', '0.1');
+
+/**
+ * Plugin to create pretty Spotify URLs
+ *
+ * The Spotify API is called before the notice is saved to gather artist and track information.
+ *
+ * @category  Plugin
+ * @package   StatusNet
+ * @author    Nick Holliday <n.g.holliday@gmail.com>
+ * @copyright Nick Holliday
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ *
+ * @see       Event
+ */
+
+class SpotifyPlugin extends Plugin
+{
+
+    function __construct()
+    {
+        parent::__construct();
+    }
+
+    function onStartNoticeSave($notice)
+    {
+        $notice->rendered = preg_replace_callback('/spotify:[a-z]{5,6}:[a-z0-9]{22}/i',
+                                                  "renderSpotifyURILink",
+                                                  $notice->rendered);
+
+        $notice->rendered = preg_replace_callback('/<a href="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" title="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" rel="external">http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}<\/a>/i',
+                                                  "renderSpotifyHTTPLink",
+                                                  $notice->rendered);
+
+        return true;
+    }
+
+    function userAgent()
+    {
+        return 'SpotifyPlugin/'.SPOTIFYPLUGIN_VERSION .
+               ' StatusNet/' . STATUSNET_VERSION;
+    }
+}
+
+function doSpotifyLookup($uri, $isArtist)
+{
+    $request = HTTPClient::start();
+    $response = $request->get('http://ws.spotify.com/lookup/1/?uri=' . $uri);
+    if ($response->isOk()) {
+        $xml = simplexml_load_string($response->getBody());
+
+        if($isArtist)
+            return $xml->name;
+        else
+            return $xml->artist->name . ' - ' . $xml->name;
+    }
+}
+
+function renderSpotifyURILink($match)
+{
+    $isArtist = false;
+    if(preg_match('/artist/', $match[0]) > 0) $isArtist = true;
+
+    $name = doSpotifyLookup($match[0], $isArtist);
+    return "<a href=\"{$match[0]}\">" . $name . "</a>";
+}
+
+function renderSpotifyHTTPLink($match)
+{
+    $match[0] = preg_replace('/<a href="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" title="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" rel="external">http:\/\/open.spotify.com\//i', 'spotify:', $match[0]);
+    $match[0] = preg_replace('/<\/a>/', '', $match[0]);
+    $match[0] = preg_replace('/\//', ':', $match[0]);
+
+    $isArtist = false;
+    if(preg_match('/artist/', $match[0]) > 0) $isArtist = true;
+
+    $name = doSpotifyLookup($match[0], $isArtist);
+    return "<a href=\"{$match[0]}\">" . $name . "</a>";
+}
diff --git a/plugins/SpotifyPlugin.php b/plugins/SpotifyPlugin.php
deleted file mode 100644 (file)
index e7a5a53..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
-  *
- * Plugin to create pretty Spotify URLs
- *
- * 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  Plugin
- * @package   StatusNet
- * @author    Nick Holliday <n.g.holliday@gmail.com>
- * @copyright Nick Holliday
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- *
- * @see      Event
- */
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-define('SPOTIFYPLUGIN_VERSION', '0.1');
-
-/**
- * Plugin to create pretty Spotify URLs
- *
- * The Spotify API is called before the notice is saved to gather artist and track information.
- *
- * @category  Plugin
- * @package   StatusNet
- * @author    Nick Holliday <n.g.holliday@gmail.com>
- * @copyright Nick Holliday
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://status.net/
- *
- * @see       Event
- */
-
-class SpotifyPlugin extends Plugin
-{
-
-    function __construct()
-    {
-        parent::__construct();
-    }
-
-    function onStartNoticeSave($notice)
-    {
-        $notice->rendered = preg_replace_callback('/spotify:[a-z]{5,6}:[a-z0-9]{22}/i',
-                                                  "renderSpotifyURILink",
-                                                  $notice->rendered);
-
-        $notice->rendered = preg_replace_callback('/<a href="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" title="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" rel="external">http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}<\/a>/i',
-                                                  "renderSpotifyHTTPLink",
-                                                  $notice->rendered);
-
-        return true;
-    }
-
-    function userAgent()
-    {
-        return 'SpotifyPlugin/'.SPOTIFYPLUGIN_VERSION .
-               ' StatusNet/' . STATUSNET_VERSION;
-    }
-}
-
-function doSpotifyLookup($uri, $isArtist)
-{
-    $request = HTTPClient::start();
-    $response = $request->get('http://ws.spotify.com/lookup/1/?uri=' . $uri);
-    if ($response->isOk()) {
-        $xml = simplexml_load_string($response->getBody());
-
-        if($isArtist)
-            return $xml->name;
-        else
-            return $xml->artist->name . ' - ' . $xml->name;
-    }
-}
-
-function renderSpotifyURILink($match)
-{
-    $isArtist = false;
-    if(preg_match('/artist/', $match[0]) > 0) $isArtist = true;
-
-    $name = doSpotifyLookup($match[0], $isArtist);
-    return "<a href=\"{$match[0]}\">" . $name . "</a>";
-}
-
-function renderSpotifyHTTPLink($match)
-{
-    $match[0] = preg_replace('/<a href="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" title="http:\/\/open.spotify.com\/[a-z]{5,6}\/[a-z0-9]{22}" rel="external">http:\/\/open.spotify.com\//i', 'spotify:', $match[0]);
-    $match[0] = preg_replace('/<\/a>/', '', $match[0]);
-    $match[0] = preg_replace('/\//', ':', $match[0]);
-
-    $isArtist = false;
-    if(preg_match('/artist/', $match[0]) > 0) $isArtist = true;
-
-    $name = doSpotifyLookup($match[0], $isArtist);
-    return "<a href=\"{$match[0]}\">" . $name . "</a>";
-}
index 80c6c5a88f824b8bf210d1865e8454f56294b7da..578ef6607c5fc846d3156f5f25ab15652425a28f 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
 /**
  * @package SubMirrorPlugin
  * @maintainer Brion Vibber <brion@status.net>
  */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-
 class SubMirrorPlugin extends Plugin
 {
     /**
index 5acdf1dfe498c97d43eef019e00a21c3e095049f..8c3a9740f3cd3528dd051ae596c621b362717070 100644 (file)
@@ -45,7 +45,6 @@ if (!defined('STATUSNET')) {
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
  * @link      http://status.net/
  */
-
 class AddMirrorAction extends BaseMirrorAction
 {
     var $feedurl;
@@ -57,7 +56,6 @@ class AddMirrorAction extends BaseMirrorAction
      *
      * @return boolean success flag
      */
-
     function prepare($args)
     {
         parent::prepare($args);
index be6942efa7ca3a263a85954dfdf0f10d644ecd04..3e3431103f1a0b030e699b06c50af5d2f7c56297 100644 (file)
@@ -45,7 +45,6 @@ if (!defined('STATUSNET')) {
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
  * @link      http://status.net/
  */
-
 abstract class BaseMirrorAction extends Action
 {
     var $user;
@@ -58,7 +57,6 @@ abstract class BaseMirrorAction extends Action
      *
      * @return boolean success flag
      */
-
     function prepare($args)
     {
         parent::prepare($args);
@@ -107,24 +105,22 @@ abstract class BaseMirrorAction extends Action
     }
 
     /**
-     * @fixme none of this belongs in end classes
+     * @todo FIXME: none of this belongs in end classes
      * this stuff belongs in shared code!
      */
     function sharedBoilerplate()
     {
         // Only allow POST requests
-
         if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-            $this->clientError(_('This action only accepts POST requests.'));
+            $this->clientError(_m('This action only accepts POST requests.'));
             return false;
         }
 
         // CSRF protection
-
         $token = $this->trimmed('token');
 
         if (!$token || $token != common_session_token()) {
-            $this->clientError(_('There was a problem with your session token.'.
+            $this->clientError(_m('There was a problem with your session token.'.
                                  ' Try again, please.'));
             return false;
         }
@@ -134,7 +130,7 @@ abstract class BaseMirrorAction extends Action
         $this->user = common_current_user();
 
         if (empty($this->user)) {
-            $this->clientError(_('Not logged in.'));
+            $this->clientError(_m('Not logged in.'));
             return false;
         }
         return true;
@@ -149,7 +145,6 @@ abstract class BaseMirrorAction extends Action
      *
      * @return void
      */
-
     function handle($args)
     {
         // Throws exception on error
@@ -158,7 +153,7 @@ abstract class BaseMirrorAction extends Action
         if ($this->boolean('ajax')) {
             $this->startHTML('text/xml;charset=utf-8');
             $this->elementStart('head');
-            $this->element('title', null, _('Subscribed'));
+            $this->element('title', null, _m('Subscribed'));
             $this->elementEnd('head');
             $this->elementStart('body');
             $unsubscribe = new EditMirrorForm($this, $this->profile);
index c7fdab0d67d4552898a51bddc786d20f878a5dee..0f8b037325adf2ed1a95769ba7bd0bd3996f3c90 100644 (file)
@@ -45,7 +45,6 @@ if (!defined('STATUSNET')) {
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
  * @link      http://status.net/
  */
-
 class EditMirrorAction extends BaseMirrorAction
 {
 
@@ -56,7 +55,6 @@ class EditMirrorAction extends BaseMirrorAction
      *
      * @return boolean success flag
      */
-
     function prepare($args)
     {
         parent::prepare($args);
@@ -93,7 +91,8 @@ class EditMirrorAction extends BaseMirrorAction
     {
         $mirror = SubMirror::getMirror($this->user, $this->profile);
         if (!$mirror) {
-            $this->clientError(_m('Requested edit of missing mirror'));
+            // TRANS: Client error thrown when a mirror request is made and no result is retrieved.
+            $this->clientError(_m('Requested edit of missing mirror.'));
         }
 
         if ($this->delete) {
index 5463a8dc0c7cbb4094cdef729d25d724956aeec4..a828b26feb68b07399662f83904f399af1a0cd8b 100644 (file)
@@ -36,9 +36,9 @@ class MirrorSettingsAction extends AccountSettingsAction
      *
      * @return string Page title
      */
-
     function title()
     {
+        // TRANS: Title.
         return _m('Feed mirror settings');
     }
 
@@ -50,6 +50,7 @@ class MirrorSettingsAction extends AccountSettingsAction
 
     function getInstructions()
     {
+        // TRANS: Instructions.
         return _m('You can mirror updates from many RSS and Atom feeds ' .
                   'into your StatusNet timeline!');
     }
@@ -61,13 +62,12 @@ class MirrorSettingsAction extends AccountSettingsAction
      *
      * @return void
      */
-
     function showContent()
     {
         $user = common_current_user();
 
         $this->showAddFeedForm();
-        
+
         $mirror = new SubMirror();
         $mirror->subscriber = $user->id;
         if ($mirror->find()) {
@@ -99,7 +99,6 @@ class MirrorSettingsAction extends AccountSettingsAction
      *
      * @return void
      */
-
     function handlePost()
     {
     }
index bd8fc80a5fbc0fb3a46c6398a4e005c2b369d580..b39af918d5ddb2e073199c07a373ab190e77de75 100644 (file)
@@ -79,7 +79,7 @@ class SubMirror extends Memcached_DataObject
     /**
      * Temporary hack to set up the compound index, since we can't do
      * it yet through regular Schema interface. (Coming for 1.0...)
-     * 
+     *
      * @param Schema $schema
      * @return void
      */
@@ -145,7 +145,7 @@ class SubMirror extends Memcached_DataObject
         $mirror->created = common_sql_now();
         $mirror->modified = common_sql_now();
         $mirror->insert();
-        
+
         return $mirror;
     }
 
@@ -173,7 +173,7 @@ class SubMirror extends Memcached_DataObject
      * This retains attribution within the site, and other nice things,
      * but currently ends up looking like 'RT @foobar bla bla' when
      * bridged out over OStatus or TwitterBridge.
-     * 
+     *
      * @param Notice $notice
      * @return mixed Notice on successful repeat, true if already repeated, false on failure
      */
@@ -192,7 +192,7 @@ class SubMirror extends Memcached_DataObject
      * Mirror a notice by emitting a new notice with the same contents.
      * Kind of dirty, but if pulling an external data feed into an account
      * that may be what you want.
-     * 
+     *
      * @param Notice $notice
      * @return mixed Notice on successful repeat, true if already repeated, false on failure
      */
@@ -216,7 +216,7 @@ class SubMirror extends Memcached_DataObject
 
     /**
      * Get the mirroring setting for a pair of profiles, if existing.
-     * 
+     *
      * @param Profile $subscriber
      * @param Profile $subscribed
      * @return mixed Profile or empty
index 0a798c9eaf9f10d8bc9ec81d67aca99b81614652..e1d50c272c80954959fd1471b0ee52df5e687f8b 100644 (file)
@@ -28,7 +28,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
 
 class AddMirrorForm extends Form
 {
-
     /**
      * Name of the form
      *
@@ -36,7 +35,6 @@ class AddMirrorForm extends Form
      *
      * @return void
      */
-
     function formLegend()
     {
     }
@@ -49,7 +47,6 @@ class AddMirrorForm extends Form
      *
      * @return void
      */
-
     function formData()
     {
         $this->out->elementStart('fieldset');
@@ -64,7 +61,7 @@ class AddMirrorForm extends Form
         $this->unli();
 
         $this->li();
-        $this->out->submit('addmirror-save', _m('Add feed'));
+        $this->out->submit('addmirror-save', _m('BUTTON','Add feed'));
         $this->unli();
         $this->out->elementEnd('ul');
         $this->out->elementEnd('fieldset');
@@ -94,7 +91,6 @@ class AddMirrorForm extends Form
      *
      * @return void
      */
-
     function formActions()
     {
     }
@@ -107,7 +103,6 @@ class AddMirrorForm extends Form
      *
      * @return string ID of the form
      */
-
     function id()
     {
         return 'add-mirror-form';
@@ -121,7 +116,6 @@ class AddMirrorForm extends Form
      *
      * @return string URL to post to
      */
-
     function action()
     {
         return common_local_url('addmirror');
@@ -132,10 +126,8 @@ class AddMirrorForm extends Form
      *
      * @return string the form's class
      */
-
     function formClass()
     {
         return 'form_settings';
     }
-
 }
index 8236da3896532b44213d2f1ca3d3e83dd24dbb1c..c1f60f9c2c4384b29fb7a0afa216c98a9eb0dd27 100644 (file)
@@ -45,7 +45,6 @@ class EditMirrorForm extends Form
      *
      * @return void
      */
-
     function formLegend()
     {
     }
@@ -58,7 +57,6 @@ class EditMirrorForm extends Form
      *
      * @return void
      */
-
     function formData()
     {
         $this->out->elementStart('fieldset');
@@ -81,6 +79,7 @@ class EditMirrorForm extends Form
         $this->out->elementEnd('div');
         $this->out->elementStart('div');
         if ($feed) {
+            // XXX: Why the hard coded space?
             $this->out->text(_m('LABEL', 'Remote feed:') . ' ');
             //$this->out->element('a', array('href' => $feed), $feed);
             $this->out->element('input', array('value' => $feed, 'readonly' => 'readonly', 'style' => 'width: 100%'));
@@ -111,7 +110,7 @@ class EditMirrorForm extends Form
         }
         $this->out->elementEnd('fieldset');
 
-        
+
         $this->out->elementStart('div');
         $this->out->submit($this->id() . '-save', _m('Save'));
         $this->out->element('input', array('type' => 'submit',
@@ -155,7 +154,6 @@ class EditMirrorForm extends Form
      *
      * @return string ID of the form
      */
-
     function id()
     {
         return 'edit-mirror-form-' . $this->profile->id;
@@ -169,7 +167,6 @@ class EditMirrorForm extends Form
      *
      * @return string URL to post to
      */
-
     function action()
     {
         return common_local_url('editmirror');
@@ -180,10 +177,8 @@ class EditMirrorForm extends Form
      *
      * @return string the form's class
      */
-
     function formClass()
     {
         return 'form_settings';
     }
-
 }
index 92b36b5ebfdcd60c4241cf465304bcc6702a189d..dae9c088953d92d58adf235d04cf750c83d1114a 100644 (file)
@@ -23,7 +23,6 @@
  * @package SubMirror
  * @author Brion Vibber <brion@status.net>
  */
-
 class MirrorQueueHandler extends QueueHandler
 {
     function transport()
index f34de8f9f81c37ac081dc8afa6b0c28966c78c7d..b46307704346e0237e0d3e91834ac1d9c362db5f 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,94 +16,114 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: SubMirrorPlugin.php:92
+#: SubMirrorPlugin.php:90
 msgid "Pull feeds into your timeline!"
 msgstr ""
 
 #. TRANS: SubMirror plugin menu item on user settings page.
-#: SubMirrorPlugin.php:111
+#: SubMirrorPlugin.php:109
 msgctxt "MENU"
 msgid "Mirroring"
 msgstr ""
 
 #. TRANS: SubMirror plugin tooltip for user settings menu item.
-#: SubMirrorPlugin.php:113
+#: SubMirrorPlugin.php:111
 msgid "Configure mirroring of posts from other feeds"
 msgstr ""
 
-#: lib/editmirrorform.php:84
+#: lib/editmirrorform.php:83
 msgctxt "LABEL"
 msgid "Remote feed:"
 msgstr ""
 
-#: lib/editmirrorform.php:88
+#: lib/editmirrorform.php:87
 msgctxt "LABEL"
 msgid "Local user"
 msgstr ""
 
-#: lib/editmirrorform.php:94
+#: lib/editmirrorform.php:93
 msgid "Mirroring style"
 msgstr ""
 
-#: lib/editmirrorform.php:96
+#: lib/editmirrorform.php:95
 msgid ""
 "Repeat: reference the original user's post (sometimes shows as 'RT @blah')"
 msgstr ""
 
-#: lib/editmirrorform.php:97
+#: lib/editmirrorform.php:96
 msgid "Repost the content under my account"
 msgstr ""
 
-#: lib/editmirrorform.php:116
+#: lib/editmirrorform.php:115
 msgid "Save"
 msgstr ""
 
-#: lib/editmirrorform.php:118
+#: lib/editmirrorform.php:117
 msgid "Stop mirroring"
 msgstr ""
 
-#: lib/addmirrorform.php:62
+#: lib/addmirrorform.php:59
 msgid "Web page or feed URL:"
 msgstr ""
 
-#: lib/addmirrorform.php:67
+#: lib/addmirrorform.php:64
+msgctxt "BUTTON"
 msgid "Add feed"
 msgstr ""
 
-#: actions/basemirror.php:73
+#: actions/basemirror.php:71
 msgid "Invalid feed URL."
 msgstr ""
 
 #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed.
-#: actions/basemirror.php:85
+#: actions/basemirror.php:83
 msgid "Invalid profile for mirroring."
 msgstr ""
 
-#: actions/basemirror.php:103
+#: actions/basemirror.php:101
 msgid "Can't mirror a StatusNet group at this time."
 msgstr ""
 
-#: actions/editmirror.php:70
+#: actions/basemirror.php:115
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/basemirror.php:123
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: actions/basemirror.php:133
+msgid "Not logged in."
+msgstr ""
+
+#: actions/basemirror.php:156
+msgid "Subscribed"
+msgstr ""
+
+#: actions/editmirror.php:68
 msgid "Requested invalid profile to edit."
 msgstr ""
 
-#: actions/editmirror.php:88
+#: actions/editmirror.php:86
 msgid "Bad form data."
 msgstr ""
 
-#: actions/editmirror.php:96
-msgid "Requested edit of missing mirror"
+#. TRANS: Client error thrown when a mirror request is made and no result is retrieved.
+#: actions/editmirror.php:95
+msgid "Requested edit of missing mirror."
 msgstr ""
 
-#: actions/addmirror.php:74
+#: actions/addmirror.php:72
 msgid "Could not subscribe to feed."
 msgstr ""
 
+#. TRANS: Title.
 #: actions/mirrorsettings.php:42
 msgid "Feed mirror settings"
 msgstr ""
 
-#: actions/mirrorsettings.php:53
+#. TRANS: Instructions.
+#: actions/mirrorsettings.php:54
 msgid ""
 "You can mirror updates from many RSS and Atom feeds into your StatusNet "
 "timeline!"
diff --git a/plugins/SubscriptionThrottle/SubscriptionThrottlePlugin.php b/plugins/SubscriptionThrottle/SubscriptionThrottlePlugin.php
new file mode 100644 (file)
index 0000000..1141133
--- /dev/null
@@ -0,0 +1,175 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * Plugin to throttle subscriptions by a user
+ *
+ * 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/>.
+ *
+ * @category  Throttle
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Subscription throttle
+ *
+ * @category  Throttle
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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 SubscriptionThrottlePlugin extends Plugin
+{
+    public $subLimits = array(86400 => 100,
+                              3600 => 50);
+
+    public $groupLimits = array(86400 => 50,
+                                3600 => 25);
+
+    /**
+     * Filter subscriptions to see if they're coming too fast.
+     *
+     * @param User $user  The user subscribing
+     * @param User $other The user being subscribed to
+     *
+     * @return boolean hook value
+     */
+
+    function onStartSubscribe($user, $other)
+    {
+        foreach ($this->subLimits as $seconds => $limit) {
+            $sub = $this->_getNthSub($user, $limit);
+
+            if (!empty($sub)) {
+                $subtime = strtotime($sub->created);
+                $now     = time();
+                if ($now - $subtime < $seconds) {
+                    throw new Exception(_("Too many subscriptions. Take a break and try again later."));
+                }
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Filter group joins to see if they're coming too fast.
+     *
+     * @param Group $group The group being joined
+     * @param User  $user  The user joining
+     *
+     * @return boolean hook value
+     */
+
+    function onStartJoinGroup($group, $user)
+    {
+        foreach ($this->groupLimits as $seconds => $limit) {
+            $mem = $this->_getNthMem($user, $limit);
+            if (!empty($mem)) {
+
+                $jointime = strtotime($mem->created);
+                $now      = time();
+                if ($now - $jointime < $seconds) {
+                    throw new Exception(_("Too many memberships. Take a break and try again later."));
+                }
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Get the Nth most recent subscription for this user
+     *
+     * @param User    $user The user to get subscriptions for
+     * @param integer $n    How far to count back
+     *
+     * @return Subscription a subscription or null
+     */
+
+    private function _getNthSub($user, $n)
+    {
+        $sub = new Subscription();
+
+        $sub->subscriber = $user->id;
+        $sub->orderBy('created DESC');
+        $sub->limit($n - 1, 1);
+
+        if ($sub->find(true)) {
+            return $sub;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Get the Nth most recent group membership for this user
+     *
+     * @param User    $user The user to get memberships for
+     * @param integer $n    How far to count back
+     *
+     * @return Group_member a membership or null
+     */
+
+    private function _getNthMem($user, $n)
+    {
+        $mem = new Group_member();
+
+        $mem->profile_id = $user->id;
+        $mem->orderBy('created DESC');
+        $mem->limit($n - 1, 1);
+
+        if ($mem->find(true)) {
+            return $mem;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Return plugin version data for display
+     *
+     * @param array &$versions Array of version arrays
+     *
+     * @return boolean hook value
+     */
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'SubscriptionThrottle',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:SubscriptionThrottle',
+                            'rawdescription' =>
+                            _m('Configurable limits for subscriptions and group memberships.'));
+        return true;
+    }
+}
+
diff --git a/plugins/SubscriptionThrottle/locale/SubscriptionThrottle.pot b/plugins/SubscriptionThrottle/locale/SubscriptionThrottle.pot
new file mode 100644 (file)
index 0000000..f0fb4dd
--- /dev/null
@@ -0,0 +1,21 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: SubscriptionThrottlePlugin.php:171
+msgid "Configurable limits for subscriptions and group memberships."
+msgstr ""
diff --git a/plugins/SubscriptionThrottlePlugin.php b/plugins/SubscriptionThrottlePlugin.php
deleted file mode 100644 (file)
index 1141133..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * Plugin to throttle subscriptions by a user
- *
- * 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/>.
- *
- * @category  Throttle
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * Subscription throttle
- *
- * @category  Throttle
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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 SubscriptionThrottlePlugin extends Plugin
-{
-    public $subLimits = array(86400 => 100,
-                              3600 => 50);
-
-    public $groupLimits = array(86400 => 50,
-                                3600 => 25);
-
-    /**
-     * Filter subscriptions to see if they're coming too fast.
-     *
-     * @param User $user  The user subscribing
-     * @param User $other The user being subscribed to
-     *
-     * @return boolean hook value
-     */
-
-    function onStartSubscribe($user, $other)
-    {
-        foreach ($this->subLimits as $seconds => $limit) {
-            $sub = $this->_getNthSub($user, $limit);
-
-            if (!empty($sub)) {
-                $subtime = strtotime($sub->created);
-                $now     = time();
-                if ($now - $subtime < $seconds) {
-                    throw new Exception(_("Too many subscriptions. Take a break and try again later."));
-                }
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Filter group joins to see if they're coming too fast.
-     *
-     * @param Group $group The group being joined
-     * @param User  $user  The user joining
-     *
-     * @return boolean hook value
-     */
-
-    function onStartJoinGroup($group, $user)
-    {
-        foreach ($this->groupLimits as $seconds => $limit) {
-            $mem = $this->_getNthMem($user, $limit);
-            if (!empty($mem)) {
-
-                $jointime = strtotime($mem->created);
-                $now      = time();
-                if ($now - $jointime < $seconds) {
-                    throw new Exception(_("Too many memberships. Take a break and try again later."));
-                }
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Get the Nth most recent subscription for this user
-     *
-     * @param User    $user The user to get subscriptions for
-     * @param integer $n    How far to count back
-     *
-     * @return Subscription a subscription or null
-     */
-
-    private function _getNthSub($user, $n)
-    {
-        $sub = new Subscription();
-
-        $sub->subscriber = $user->id;
-        $sub->orderBy('created DESC');
-        $sub->limit($n - 1, 1);
-
-        if ($sub->find(true)) {
-            return $sub;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Get the Nth most recent group membership for this user
-     *
-     * @param User    $user The user to get memberships for
-     * @param integer $n    How far to count back
-     *
-     * @return Group_member a membership or null
-     */
-
-    private function _getNthMem($user, $n)
-    {
-        $mem = new Group_member();
-
-        $mem->profile_id = $user->id;
-        $mem->orderBy('created DESC');
-        $mem->limit($n - 1, 1);
-
-        if ($mem->find(true)) {
-            return $mem;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Return plugin version data for display
-     *
-     * @param array &$versions Array of version arrays
-     *
-     * @return boolean hook value
-     */
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'SubscriptionThrottle',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:SubscriptionThrottle',
-                            'rawdescription' =>
-                            _m('Configurable limits for subscriptions and group memberships.'));
-        return true;
-    }
-}
-
index 46e329d8a4fc29c31a4dac642d9b9885af5e2791..dd8a97276748a916e137ea0936ad96a775ddf027 100644 (file)
@@ -51,7 +51,7 @@ class TabFocusPlugin extends Plugin
                             'author' => 'Craig Andrews and Paul Irish',
                             'homepage' => 'http://status.net/wiki/Plugin:TabFocus',
                             'rawdescription' =>
-                            _m('TabFocus changes the notice form behavior so that, while in the text area, pressing the tab key focuses the "Send" button, matching the behavor of Twitter.'));
+                            _m('TabFocus changes the notice form behavior so that, while in the text area, pressing the tab key focuses the "Send" button, matching the behavior of Twitter.'));
         return true;
     }
 }
index 6de47bf08fcc872a363236a8cd0443cdb39d5334..31cc259662fe70f43dce4f75ac3d25593aaa54df 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
@@ -19,6 +19,6 @@ msgstr ""
 #: TabFocusPlugin.php:54
 msgid ""
 "TabFocus changes the notice form behavior so that, while in the text area, "
-"pressing the tab key focuses the \"Send\" button, matching the behavor of "
+"pressing the tab key focuses the \"Send\" button, matching the behavior of "
 "Twitter."
 msgstr ""
diff --git a/plugins/Template/TemplatePlugin.php b/plugins/Template/TemplatePlugin.php
new file mode 100644 (file)
index 0000000..80625c5
--- /dev/null
@@ -0,0 +1,357 @@
+<?php
+/**
+ * Plugin to render old skool templates
+ *
+ * Captures rendered parts from the output buffer, passes them through a template file: tpl/index.html
+ * Adds an API method at index.php/template/update which lets you overwrite the template file
+ * Requires username/password and a single POST parameter called "template"
+ * The method is disabled unless the user is #1, the first user of the system
+ *
+ * @category  Plugin
+ * @package   StatusNet
+ * @author    Brian Hendrickson <brian@megapump.com>
+ * @copyright 2009 Megapump, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://megapump.com/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+define('TEMPLATEPLUGIN_VERSION', '0.1');
+
+class TemplatePlugin extends Plugin {
+
+  var $blocks = array();
+
+  function __construct() {
+    parent::__construct();
+  }
+
+  // capture the RouterInitialized event
+  // and connect a new API method
+  // for updating the template
+  function onRouterInitialized( $m ) {
+    $m->connect( 'template/update', array(
+      'action'      => 'template',
+    ));
+  }
+
+  // <%styles%>
+  // <%scripts%>
+  // <%search%>
+  // <%feeds%>
+  // <%description%>
+  // <%head%>
+  function onStartShowHead( &$act ) {
+    $this->clear_xmlWriter($act);
+    $act->extraHead();
+    $this->blocks['head'] = $act->xw->flush();
+    $act->showStylesheets();
+    $this->blocks['styles'] = $act->xw->flush();
+    $act->showScripts();
+    $this->blocks['scripts'] = $act->xw->flush();
+    $act->showFeeds();
+    $this->blocks['feeds'] = $act->xw->flush();
+    $act->showOpenSearch();
+    $this->blocks['search'] = $act->xw->flush();
+    $act->showDescription();
+    $this->blocks['description'] = $act->xw->flush();
+    return false;
+  }
+
+  // <%bodytext%>
+  function onStartShowContentBlock( &$act ) {
+    $this->clear_xmlWriter($act);
+    return true;
+  }
+  function onEndShowContentBlock( &$act ) {
+    $this->blocks['bodytext'] = $act->xw->flush();
+  }
+
+  // <%localnav%>
+  function onStartShowLocalNavBlock( &$act ) {
+    $this->clear_xmlWriter($act);
+    return true;
+  }
+  function onEndShowLocalNavBlock( &$act ) {
+    $this->blocks['localnav'] = $act->xw->flush();
+  }
+
+  // <%export%>
+  function onStartShowExportData( &$act ) {
+    $this->clear_xmlWriter($act);
+    return true;
+  }
+  function onEndShowExportData( &$act ) {
+    $this->blocks['export'] = $act->xw->flush();
+  }
+
+  // <%subscriptions%>
+  // <%subscribers%>
+  // <%groups%>
+  // <%statistics%>
+  // <%cloud%>
+  // <%groupmembers%>
+  // <%groupstatistics%>
+  // <%groupcloud%>
+  // <%popular%>
+  // <%groupsbyposts%>
+  // <%featuredusers%>
+  // <%groupsbymembers%>
+  function onStartShowSections( &$act ) {
+    global $action;
+    $this->clear_xmlWriter($act);
+    switch ($action) {
+      case "showstream":
+        $act->showSubscriptions();
+        $this->blocks['subscriptions'] = $act->xw->flush();
+        $act->showSubscribers();
+        $this->blocks['subscribers'] = $act->xw->flush();
+        $act->showGroups();
+        $this->blocks['groups'] = $act->xw->flush();
+        $act->showStatistics();
+        $this->blocks['statistics'] = $act->xw->flush();
+        $cloud = new PersonalTagCloudSection($act, $act->user);
+        $cloud->show();
+        $this->blocks['cloud'] = $act->xw->flush();
+        break;
+      case "showgroup":
+        $act->showMembers();
+        $this->blocks['groupmembers'] = $act->xw->flush();
+        $act->showStatistics();
+        $this->blocks['groupstatistics'] = $act->xw->flush();
+        $cloud = new GroupTagCloudSection($act, $act->group);
+        $cloud->show();
+        $this->blocks['groupcloud'] = $act->xw->flush();
+        break;
+      case "public":
+        $pop = new PopularNoticeSection($act);
+        $pop->show();
+        $this->blocks['popular'] = $act->xw->flush();
+        $gbp = new GroupsByPostsSection($act);
+        $gbp->show();
+        $this->blocks['groupsbyposts'] = $act->xw->flush();
+        $feat = new FeaturedUsersSection($act);
+        $feat->show();
+        $this->blocks['featuredusers'] = $act->xw->flush();
+        break;
+      case "groups":
+        $gbp = new GroupsByPostsSection($act);
+        $gbp->show();
+        $this->blocks['groupsbyposts'] = $act->xw->flush();
+        $gbm = new GroupsByMembersSection($act);
+        $gbm->show();
+        $this->blocks['groupsbymembers'] = $act->xw->flush();
+        break;
+    }
+    return false;
+  }
+
+  // <%logo%>
+  // <%nav%>
+  // <%notice%>
+  // <%noticeform%>
+  function onStartShowHeader( &$act ) {
+    $this->clear_xmlWriter($act);
+    $act->showLogo();
+    $this->blocks['logo'] = $act->xw->flush();
+    $act->showPrimaryNav();
+    $this->blocks['nav'] = $act->xw->flush();
+    $act->showSiteNotice();
+    $this->blocks['notice'] = $act->xw->flush();
+    if (common_logged_in()) {
+        $act->showNoticeForm();
+    } else {
+        $act->showAnonymousMessage();
+    }
+    $this->blocks['noticeform'] = $act->xw->flush();
+    return false;
+  }
+
+  // <%secondarynav%>
+  // <%licenses%>
+  function onStartShowFooter( &$act ) {
+    $this->clear_xmlWriter($act);
+    $act->showSecondaryNav();
+    $this->blocks['secondarynav'] = $act->xw->flush();
+    $act->showLicenses();
+    $this->blocks['licenses'] = $act->xw->flush();
+    return false;
+  }
+
+  // capture the EndHTML event
+  // and include the template
+  function onEndEndHTML($act) {
+
+    global $action, $tags;
+
+    // set the action and title values
+    $vars = array(
+      'action'=>$action,
+      'title'=>$act->title(). " - ". common_config('site', 'name')
+    );
+
+    // use the PHP template
+    // unless statusnet config:
+    //   $config['template']['mode'] = 'html';
+    if (!(common_config('template', 'mode') == 'html')) {
+      $tpl_file = $this->templateFolder() . '/index.php';
+      $tags = array_merge($vars,$this->blocks);
+      include $tpl_file;
+      return;
+    }
+
+    $tpl_file = $this->templateFolder() . '/index.html';
+
+    // read the static template
+    $output = file_get_contents( $tpl_file );
+
+    $tags = array();
+
+    // get a list of the <%tags%> in the template
+    $pattern='/<%([a-z]+)%>/';
+
+    if ( 1 <= preg_match_all( $pattern, $output, $found ))
+      $tags[] = $found;
+
+    // for each found tag, set its value from the rendered blocks
+    foreach( $tags[0][1] as $pos=>$tag ) {
+      if (isset($this->blocks[$tag]))
+        $vars[$tag] = $this->blocks[$tag];
+
+      // didn't find a block for the tag
+      elseif (!isset($vars[$tag]))
+        $vars[$tag] = '';
+    }
+
+    // replace the tags in the template
+    foreach( $vars as $key=>$val )
+      $output = str_replace( '<%'.$key.'%>', $val, $output );
+
+    echo $output;
+
+    return true;
+
+  }
+  function templateFolder() {
+    return 'tpl';
+  }
+
+  // catching the StartShowHTML event to halt the rendering
+  function onStartShowHTML( &$act ) {
+    $this->clear_xmlWriter($act);
+    return true;
+  }
+
+  // clear the xmlWriter
+  function clear_xmlWriter( &$act ) {
+    $act->xw->openMemory();
+    $act->xw->setIndent(true);
+  }
+
+}
+
+/**
+ * Action for updating the template remotely
+ *
+ * "template/update" -- a POST method that requires a single
+ * parameter "template", containing the new template code
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Brian Hendrickson <brian@megapump.com>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://megapump.com/
+ *
+ */
+
+class TemplateAction extends Action
+{
+
+  function prepare($args) {
+    parent::prepare($args);
+    return true;
+  }
+
+  function handle($args) {
+
+    parent::handle($args);
+
+    if (!isset($_SERVER['PHP_AUTH_USER'])) {
+
+      // not authenticated, show login form
+      header('WWW-Authenticate: Basic realm="StatusNet API"');
+
+      // cancelled the browser login form
+      $this->clientError(_('Authentication error!'), $code = 401);
+
+    } else {
+
+      $nick = $_SERVER['PHP_AUTH_USER'];
+      $pass = $_SERVER['PHP_AUTH_PW'];
+
+      // check username and password
+      $user = common_check_user($nick,$pass);
+
+      if ($user) {
+
+        // verify that user is admin
+        if (!($user->id == 1))
+          $this->clientError(_('Only User #1 can update the template.'), $code = 401);
+
+        // open the old template
+        $tpl_file = $this->templateFolder() . '/index.html';
+        $fp = fopen( $tpl_file, 'w+' );
+
+        // overwrite with the new template
+        fwrite($fp, $this->arg('template'));
+        fclose($fp);
+
+        header('HTTP/1.1 200 OK');
+        header('Content-type: text/plain');
+        print "Template Updated!";
+
+      } else {
+
+        // bad username and password
+        $this->clientError(_('Authentication error!'), $code = 401);
+
+      }
+
+    }
+  }
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Template',
+                            'version' => TEMPLATEPLUGIN_VERSION,
+                            'author' => 'Brian Hendrickson',
+                            'homepage' => 'http://status.net/wiki/Plugin:Template',
+                            'rawdescription' =>
+                            _m('Use an HTML template for Web output.'));
+        return true;
+    }
+
+}
+
+/**
+ * Function for retrieving a statusnet display section
+ *
+ * requires one parameter, the name of the section
+ * section names are listed in the comments of the TemplatePlugin class
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Brian Hendrickson <brian@megapump.com>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://megapump.com/
+ *
+ */
+
+function section($tagname) {
+  global $tags;
+  if (isset($tags[$tagname]))
+    return $tags[$tagname];
+}
+
diff --git a/plugins/TemplatePlugin.php b/plugins/TemplatePlugin.php
deleted file mode 100644 (file)
index 80625c5..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-<?php
-/**
- * Plugin to render old skool templates
- *
- * Captures rendered parts from the output buffer, passes them through a template file: tpl/index.html
- * Adds an API method at index.php/template/update which lets you overwrite the template file
- * Requires username/password and a single POST parameter called "template"
- * The method is disabled unless the user is #1, the first user of the system
- *
- * @category  Plugin
- * @package   StatusNet
- * @author    Brian Hendrickson <brian@megapump.com>
- * @copyright 2009 Megapump, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://megapump.com/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-define('TEMPLATEPLUGIN_VERSION', '0.1');
-
-class TemplatePlugin extends Plugin {
-
-  var $blocks = array();
-
-  function __construct() {
-    parent::__construct();
-  }
-
-  // capture the RouterInitialized event
-  // and connect a new API method
-  // for updating the template
-  function onRouterInitialized( $m ) {
-    $m->connect( 'template/update', array(
-      'action'      => 'template',
-    ));
-  }
-
-  // <%styles%>
-  // <%scripts%>
-  // <%search%>
-  // <%feeds%>
-  // <%description%>
-  // <%head%>
-  function onStartShowHead( &$act ) {
-    $this->clear_xmlWriter($act);
-    $act->extraHead();
-    $this->blocks['head'] = $act->xw->flush();
-    $act->showStylesheets();
-    $this->blocks['styles'] = $act->xw->flush();
-    $act->showScripts();
-    $this->blocks['scripts'] = $act->xw->flush();
-    $act->showFeeds();
-    $this->blocks['feeds'] = $act->xw->flush();
-    $act->showOpenSearch();
-    $this->blocks['search'] = $act->xw->flush();
-    $act->showDescription();
-    $this->blocks['description'] = $act->xw->flush();
-    return false;
-  }
-
-  // <%bodytext%>
-  function onStartShowContentBlock( &$act ) {
-    $this->clear_xmlWriter($act);
-    return true;
-  }
-  function onEndShowContentBlock( &$act ) {
-    $this->blocks['bodytext'] = $act->xw->flush();
-  }
-
-  // <%localnav%>
-  function onStartShowLocalNavBlock( &$act ) {
-    $this->clear_xmlWriter($act);
-    return true;
-  }
-  function onEndShowLocalNavBlock( &$act ) {
-    $this->blocks['localnav'] = $act->xw->flush();
-  }
-
-  // <%export%>
-  function onStartShowExportData( &$act ) {
-    $this->clear_xmlWriter($act);
-    return true;
-  }
-  function onEndShowExportData( &$act ) {
-    $this->blocks['export'] = $act->xw->flush();
-  }
-
-  // <%subscriptions%>
-  // <%subscribers%>
-  // <%groups%>
-  // <%statistics%>
-  // <%cloud%>
-  // <%groupmembers%>
-  // <%groupstatistics%>
-  // <%groupcloud%>
-  // <%popular%>
-  // <%groupsbyposts%>
-  // <%featuredusers%>
-  // <%groupsbymembers%>
-  function onStartShowSections( &$act ) {
-    global $action;
-    $this->clear_xmlWriter($act);
-    switch ($action) {
-      case "showstream":
-        $act->showSubscriptions();
-        $this->blocks['subscriptions'] = $act->xw->flush();
-        $act->showSubscribers();
-        $this->blocks['subscribers'] = $act->xw->flush();
-        $act->showGroups();
-        $this->blocks['groups'] = $act->xw->flush();
-        $act->showStatistics();
-        $this->blocks['statistics'] = $act->xw->flush();
-        $cloud = new PersonalTagCloudSection($act, $act->user);
-        $cloud->show();
-        $this->blocks['cloud'] = $act->xw->flush();
-        break;
-      case "showgroup":
-        $act->showMembers();
-        $this->blocks['groupmembers'] = $act->xw->flush();
-        $act->showStatistics();
-        $this->blocks['groupstatistics'] = $act->xw->flush();
-        $cloud = new GroupTagCloudSection($act, $act->group);
-        $cloud->show();
-        $this->blocks['groupcloud'] = $act->xw->flush();
-        break;
-      case "public":
-        $pop = new PopularNoticeSection($act);
-        $pop->show();
-        $this->blocks['popular'] = $act->xw->flush();
-        $gbp = new GroupsByPostsSection($act);
-        $gbp->show();
-        $this->blocks['groupsbyposts'] = $act->xw->flush();
-        $feat = new FeaturedUsersSection($act);
-        $feat->show();
-        $this->blocks['featuredusers'] = $act->xw->flush();
-        break;
-      case "groups":
-        $gbp = new GroupsByPostsSection($act);
-        $gbp->show();
-        $this->blocks['groupsbyposts'] = $act->xw->flush();
-        $gbm = new GroupsByMembersSection($act);
-        $gbm->show();
-        $this->blocks['groupsbymembers'] = $act->xw->flush();
-        break;
-    }
-    return false;
-  }
-
-  // <%logo%>
-  // <%nav%>
-  // <%notice%>
-  // <%noticeform%>
-  function onStartShowHeader( &$act ) {
-    $this->clear_xmlWriter($act);
-    $act->showLogo();
-    $this->blocks['logo'] = $act->xw->flush();
-    $act->showPrimaryNav();
-    $this->blocks['nav'] = $act->xw->flush();
-    $act->showSiteNotice();
-    $this->blocks['notice'] = $act->xw->flush();
-    if (common_logged_in()) {
-        $act->showNoticeForm();
-    } else {
-        $act->showAnonymousMessage();
-    }
-    $this->blocks['noticeform'] = $act->xw->flush();
-    return false;
-  }
-
-  // <%secondarynav%>
-  // <%licenses%>
-  function onStartShowFooter( &$act ) {
-    $this->clear_xmlWriter($act);
-    $act->showSecondaryNav();
-    $this->blocks['secondarynav'] = $act->xw->flush();
-    $act->showLicenses();
-    $this->blocks['licenses'] = $act->xw->flush();
-    return false;
-  }
-
-  // capture the EndHTML event
-  // and include the template
-  function onEndEndHTML($act) {
-
-    global $action, $tags;
-
-    // set the action and title values
-    $vars = array(
-      'action'=>$action,
-      'title'=>$act->title(). " - ". common_config('site', 'name')
-    );
-
-    // use the PHP template
-    // unless statusnet config:
-    //   $config['template']['mode'] = 'html';
-    if (!(common_config('template', 'mode') == 'html')) {
-      $tpl_file = $this->templateFolder() . '/index.php';
-      $tags = array_merge($vars,$this->blocks);
-      include $tpl_file;
-      return;
-    }
-
-    $tpl_file = $this->templateFolder() . '/index.html';
-
-    // read the static template
-    $output = file_get_contents( $tpl_file );
-
-    $tags = array();
-
-    // get a list of the <%tags%> in the template
-    $pattern='/<%([a-z]+)%>/';
-
-    if ( 1 <= preg_match_all( $pattern, $output, $found ))
-      $tags[] = $found;
-
-    // for each found tag, set its value from the rendered blocks
-    foreach( $tags[0][1] as $pos=>$tag ) {
-      if (isset($this->blocks[$tag]))
-        $vars[$tag] = $this->blocks[$tag];
-
-      // didn't find a block for the tag
-      elseif (!isset($vars[$tag]))
-        $vars[$tag] = '';
-    }
-
-    // replace the tags in the template
-    foreach( $vars as $key=>$val )
-      $output = str_replace( '<%'.$key.'%>', $val, $output );
-
-    echo $output;
-
-    return true;
-
-  }
-  function templateFolder() {
-    return 'tpl';
-  }
-
-  // catching the StartShowHTML event to halt the rendering
-  function onStartShowHTML( &$act ) {
-    $this->clear_xmlWriter($act);
-    return true;
-  }
-
-  // clear the xmlWriter
-  function clear_xmlWriter( &$act ) {
-    $act->xw->openMemory();
-    $act->xw->setIndent(true);
-  }
-
-}
-
-/**
- * Action for updating the template remotely
- *
- * "template/update" -- a POST method that requires a single
- * parameter "template", containing the new template code
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Brian Hendrickson <brian@megapump.com>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://megapump.com/
- *
- */
-
-class TemplateAction extends Action
-{
-
-  function prepare($args) {
-    parent::prepare($args);
-    return true;
-  }
-
-  function handle($args) {
-
-    parent::handle($args);
-
-    if (!isset($_SERVER['PHP_AUTH_USER'])) {
-
-      // not authenticated, show login form
-      header('WWW-Authenticate: Basic realm="StatusNet API"');
-
-      // cancelled the browser login form
-      $this->clientError(_('Authentication error!'), $code = 401);
-
-    } else {
-
-      $nick = $_SERVER['PHP_AUTH_USER'];
-      $pass = $_SERVER['PHP_AUTH_PW'];
-
-      // check username and password
-      $user = common_check_user($nick,$pass);
-
-      if ($user) {
-
-        // verify that user is admin
-        if (!($user->id == 1))
-          $this->clientError(_('Only User #1 can update the template.'), $code = 401);
-
-        // open the old template
-        $tpl_file = $this->templateFolder() . '/index.html';
-        $fp = fopen( $tpl_file, 'w+' );
-
-        // overwrite with the new template
-        fwrite($fp, $this->arg('template'));
-        fclose($fp);
-
-        header('HTTP/1.1 200 OK');
-        header('Content-type: text/plain');
-        print "Template Updated!";
-
-      } else {
-
-        // bad username and password
-        $this->clientError(_('Authentication error!'), $code = 401);
-
-      }
-
-    }
-  }
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'Template',
-                            'version' => TEMPLATEPLUGIN_VERSION,
-                            'author' => 'Brian Hendrickson',
-                            'homepage' => 'http://status.net/wiki/Plugin:Template',
-                            'rawdescription' =>
-                            _m('Use an HTML template for Web output.'));
-        return true;
-    }
-
-}
-
-/**
- * Function for retrieving a statusnet display section
- *
- * requires one parameter, the name of the section
- * section names are listed in the comments of the TemplatePlugin class
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Brian Hendrickson <brian@megapump.com>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://megapump.com/
- *
- */
-
-function section($tagname) {
-  global $tags;
-  if (isset($tags[$tagname]))
-    return $tags[$tagname];
-}
-
index ea0821eee03bea397269d1b097e74806495b9b75..41026d711bc5d9f1a1dba9bafb8c4d1c2ff02439 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+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"
index ca16f60591de8ef42b7cc17a14a5bfb6a6648123..2ec4b71608e7f28dc681e14e7f06106807971772 100644 (file)
@@ -48,7 +48,6 @@ if (!defined('STATUSNET')) {
  */
 class TinyMCEPlugin extends Plugin
 {
-
     var $html;
 
     function onEndShowScripts($action)
@@ -74,7 +73,7 @@ class TinyMCEPlugin extends Plugin
             'author' => 'Evan Prodromou',
             'homepage' => 'http://status.net/wiki/Plugin:TinyMCE',
             'rawdescription' =>
-            _m('Use TinyMCE library to allow rich text editing in the browser'));
+            _m('Use TinyMCE library to allow rich text editing in the browser.'));
         return true;
     }
 
@@ -108,7 +107,7 @@ class TinyMCEPlugin extends Plugin
     /**
      * Hook for new-notice form processing to take our HTML goodies;
      * won't affect API posting etc.
-     * 
+     *
      * @param NewNoticeAction $action
      * @param User $user
      * @param string $content
@@ -159,9 +158,9 @@ class TinyMCEPlugin extends Plugin
 
     /**
      * Format the attachment placeholder img with the final version.
-     * 
+     *
      * @param DOMElement $img
-     * @param MediaFile $media 
+     * @param MediaFile $media
      */
     private function formatAttachment($img, $media)
     {
@@ -321,5 +320,4 @@ END_OF_SCRIPT;
 
         return $scr;
     }
-
 }
index 788762ba85af108b6594ae079f9f5d375136e4e0..c42fea87193adb286e9be1c0853500754584ab73 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,6 +16,6 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: TinyMCEPlugin.php:77
-msgid "Use TinyMCE library to allow rich text editing in the browser"
+#: TinyMCEPlugin.php:76
+msgid "Use TinyMCE library to allow rich text editing in the browser."
 msgstr ""
index 34b82ef83a7c8dd08b6f4655bee8fb4d613bbc63..097d4486f91c4d9d214ce2ef6118860237fa8221 100644 (file)
@@ -45,17 +45,14 @@ require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
  * @link     http://status.net/
  * @link     http://twitter.com/
  */
-
 class TwitterBridgePlugin extends Plugin
 {
-
     const VERSION = STATUSNET_VERSION;
     public $adminImportControl = false; // Should the 'import' checkbox be exposed in the admin panel?
 
     /**
      * Initializer for the plugin.
      */
-
     function initialize()
     {
         // Allow the key and secret to be passed in
@@ -86,7 +83,6 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return boolean result
      */
-
     static function hasKeys()
     {
         $ckey    = common_config('twitter', 'consumer_key');
@@ -113,7 +109,6 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return boolean hook return
      */
-
     function onRouterInitialized($m)
     {
         $m->connect('admin/twitter', array('action' => 'twitteradminpanel'));
@@ -310,7 +305,6 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return boolean hook value
      */
-
     function onPluginVersion(&$versions)
     {
         $versions[] = array(
@@ -319,8 +313,8 @@ class TwitterBridgePlugin extends Plugin
             'author' => 'Zach Copley, Julien C',
             'homepage' => 'http://status.net/wiki/Plugin:TwitterBridge',
             'rawdescription' => _m(
-                'The Twitter "bridge" plugin allows you to integrate ' .
-                'your StatusNet instance with ' .
+                'The Twitter "bridge" plugin allows integration ' .
+                'of a StatusNet instance with ' .
                 '<a href="http://twitter.com/">Twitter</a>.'
             )
         );
@@ -374,7 +368,6 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
-
     function onCheckSchema()
     {
         $schema = Schema::get();
@@ -416,7 +409,6 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return boolean hook value
      */
-
     function onStartDeleteOwnNotice(User $user, Notice $notice)
     {
         $n2s = Notice_to_status::staticGet('notice_id', $notice->id);
@@ -452,7 +444,6 @@ class TwitterBridgePlugin extends Plugin
      * @param Notice $notice being favored
      * @return hook return value
      */
-
     function onEndFavorNotice(Profile $profile, Notice $notice)
     {
         $flink = Foreign_link::getByUserID($profile->id,
@@ -489,7 +480,6 @@ class TwitterBridgePlugin extends Plugin
      *
      * @return hook return value
      */
-
     function onEndDisfavorNotice(Profile $profile, Notice $notice)
     {
         $flink = Foreign_link::getByUserID($profile->id,
index 2a5f1fd60581f132ae13addaeeb2ca17a3c6fe61..a8337862c833c4e25097e6c8145d5d6f5d9c0f84 100644 (file)
@@ -48,7 +48,6 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
  *
  * @see      DB_DataObject
  */
-
 class Twitter_synch_status extends Memcached_DataObject
 {
     public $__table = 'twitter_synch_status'; // table name
@@ -67,7 +66,6 @@ class Twitter_synch_status extends Memcached_DataObject
      * @return Twitter_synch_status object found, or null for no hits
      *
      */
-
     function staticGet($k, $v=null)
     {
         throw new Exception("Use pkeyGet() for this class.");
@@ -81,7 +79,6 @@ class Twitter_synch_status extends Memcached_DataObject
      * @return Twitter_synch_status object found, or null for no hits
      *
      */
-
     function pkeyGet($kv)
     {
         return Memcached_DataObject::pkeyGet('Twitter_synch_status', $kv);
@@ -95,7 +92,6 @@ class Twitter_synch_status extends Memcached_DataObject
      *
      * @return array array of column definitions
      */
-
     function table()
     {
         return array('foreign_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
@@ -115,7 +111,6 @@ class Twitter_synch_status extends Memcached_DataObject
      *
      * @return array list of key field names
      */
-
     function keys()
     {
         return array_keys($this->keyTypes());
@@ -133,7 +128,6 @@ class Twitter_synch_status extends Memcached_DataObject
      *         'K' for primary key: for compound keys, add an entry for each component;
      *         'U' for unique keys: compound keys are not well supported here.
      */
-
     function keyTypes()
     {
         return array('foreign_id' => 'K',
@@ -150,7 +144,6 @@ class Twitter_synch_status extends Memcached_DataObject
      *
      * @return array magic three-false array that stops auto-incrementing.
      */
-
     function sequenceKey()
     {
         return array(false, false, false);
@@ -174,7 +167,6 @@ class Twitter_synch_status extends Memcached_DataObject
                                    'timeline' => $timeline));
 
         if (empty($tss)) {
-
             $tss = new Twitter_synch_status();
 
             $tss->foreign_id = $foreign_id;
@@ -186,9 +178,7 @@ class Twitter_synch_status extends Memcached_DataObject
             $tss->insert();
 
             return true;
-
         } else {
-
             $orig = clone($tss);
 
             $tss->last_id  = $last_id;
index 02546a02cad93538d11ecb3d4ffb5d14c3952aa9..38a8b89ebb815acbd6147bba088f242c58a63dc2 100755 (executable)
@@ -45,7 +45,6 @@ require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class SyncTwitterFriendsDaemon extends ParallelizingDaemon
 {
     /**
@@ -59,7 +58,6 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
      * @return void
      *
      **/
-
     function __construct($id = null, $interval = 60,
                          $max_children = 2, $debug = null)
     {
@@ -71,7 +69,6 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
      *
      * @return string Name of the daemon.
      */
-
     function name()
     {
         return ('synctwitterfriends.' . $this->_id);
@@ -110,12 +107,10 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
     }
 
     function childTask($flink) {
-
         // Each child ps needs its own DB connection
 
         // Note: DataObject::getDatabaseConnection() creates
         // a new connection if there isn't one already
-
         $conn = &$flink->getDatabaseConnection();
 
         $this->subscribeTwitterFriends($flink);
@@ -127,7 +122,6 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
 
         // XXX: Couldn't find a less brutal way to blow
         // away a cached connection
-
         global $_DB_DATAOBJECT;
         unset($_DB_DATAOBJECT['CONNECTIONS']);
     }
@@ -277,4 +271,3 @@ if (have_option('d') || have_option('debug')) {
 
 $syncer = new SyncTwitterFriendsDaemon($id, 60, 2, $debug);
 $syncer->runOnce();
-
index 181be3dcf3827a7dc812db7ae0b7cdef4af5b763..590fa2954d1ac467c65d2f23a97917a9b1ef59e6 100755 (executable)
@@ -62,7 +62,6 @@ require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class TwitterStatusFetcher extends ParallelizingDaemon
 {
     /**
@@ -87,7 +86,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
      *
      * @return string Name of the daemon.
      */
-
     function name()
     {
         return ('twitterstatusfetcher.'.$this->_id);
@@ -99,7 +97,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
      *
      * @return array flinks an array of Foreign_link objects
      */
-
     function getObjects()
     {
         global $_DB_DATAOBJECT;
@@ -133,12 +130,10 @@ class TwitterStatusFetcher extends ParallelizingDaemon
     }
 
     function childTask($flink) {
-
         // Each child ps needs its own DB connection
 
         // Note: DataObject::getDatabaseConnection() creates
         // a new connection if there isn't one already
-
         $conn = &$flink->getDatabaseConnection();
 
         $this->getTimeline($flink);
@@ -150,7 +145,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
 
         // XXX: Couldn't find a less brutal way to blow
         // away a cached connection
-
         global $_DB_DATAOBJECT;
         unset($_DB_DATAOBJECT['CONNECTIONS']);
     }
@@ -201,9 +195,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
         // Reverse to preserve order
 
         foreach (array_reverse($timeline) as $status) {
-
             // Hacktastic: filter out stuff coming from this StatusNet
-
             $source = mb_strtolower(common_config('integration', 'source'));
 
             if (preg_match("/$source/", mb_strtolower($status->source))) {
@@ -214,7 +206,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
 
             // Don't save it if the user is protected
             // FIXME: save it but treat it as private
-
             if ($status->user->protected) {
                 continue;
             }
@@ -232,7 +223,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
         }
 
         // Okay, record the time we synced with Twitter for posterity
-
         $flink->last_noticesync = common_sql_now();
         $flink->update();
     }
@@ -250,7 +240,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
         $statusUri = $this->makeStatusURI($status->user->screen_name, $status->id);
 
         // check to see if we've already imported the status
-
         $n2s = Notice_to_status::staticGet('status_id', $status->id);
 
         if (!empty($n2s)) {
@@ -263,7 +252,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
         }
 
         // If it's a retweet, save it as a repeat!
-
         if (!empty($status->retweeted_status)) {
             common_log(LOG_INFO, "Status {$status->id} is a retweet of {$status->retweeted_status->id}.");
             $original = $this->saveStatus($status->retweeted_status);
@@ -273,7 +261,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
                 $author = $original->getProfile();
                 // TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
                 // TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-                $content = sprintf(_('RT @%1$s %2$s'),
+                $content = sprintf(_m('RT @%1$s %2$s'),
                                    $author->nickname,
                                    $original->content);
 
@@ -365,7 +353,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
      *
      * @return string URI
      */
-
     function makeStatusURI($username, $id)
     {
         return 'http://twitter.com/'
@@ -383,7 +370,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
      *
      * @return mixed value the first Profile with that url, or null
      */
-
     function getProfileByUrl($nickname, $profileurl)
     {
         $profile = new Profile();
@@ -407,7 +393,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
      *
      * @return mixed value a matching Notice or null
      */
-
     function checkDupe($profile, $statusUri)
     {
         $notice = new Notice();
@@ -426,7 +411,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
     function ensureProfile($user)
     {
         // check to see if there's already a profile for this user
-
         $profileurl = 'http://twitter.com/' . $user->screen_name;
         $profile = $this->getProfileByUrl($user->screen_name, $profileurl);
 
@@ -440,7 +424,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
             return $profile;
 
         } else {
-
             common_debug($this->name() . ' - Adding profile and remote profile ' .
                          "for Twitter user: $profileurl.");
 
@@ -472,7 +455,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
             $remote_pro = Remote_profile::staticGet('uri', $profileurl);
 
             if (empty($remote_pro)) {
-
                 $remote_pro = new Remote_profile();
 
                 $remote_pro->id = $id;
@@ -619,7 +601,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
         $avatar = $profile->getAvatar($sizes[$size]);
 
         // Delete the avatar, if present
-
         if ($avatar) {
             $avatar->delete();
         }
@@ -644,10 +625,8 @@ class TwitterStatusFetcher extends ParallelizingDaemon
             $avatar->height = 48;
             break;
         default:
-
             // Note: Twitter's big avatars are a different size than
             // StatusNet's (StatusNet's = 96)
-
             $avatar->width  = 73;
             $avatar->height = 73;
         }
@@ -840,4 +819,3 @@ if (have_option('d') || have_option('debug')) {
 
 $fetcher = new TwitterStatusFetcher($id, 60, 2, $debug);
 $fetcher->runOnce();
-
index b5f9061742d2fb4eb30efd3458a61a361b68851d..5a75bc5f80f6d1712c22f0aa2ceaa37c730c2ece 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-19 15:29+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,16 +16,16 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: twitter.php:363
+#: twitter.php:350
 msgid "Your Twitter bridge has been disabled."
 msgstr ""
 
-#: twitter.php:367
+#: twitter.php:354
 #, php-format
 msgid ""
 "Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
 "disabled. We no longer seem to have permission to update your Twitter "
-"status. (Did you revoke %3$s's access?)\n"
+"status. Did you maybe revoke %3$s's access?\n"
 "\n"
 "You can re-enable your Twitter bridge by visiting your Twitter settings "
 "page:\n"
@@ -33,95 +33,136 @@ msgid ""
 "\t%2$s\n"
 "\n"
 "Regards,\n"
-"%3$s\n"
+"%3$s"
 msgstr ""
 
-#: TwitterBridgePlugin.php:156 TwitterBridgePlugin.php:179
-#: TwitterBridgePlugin.php:296 twitteradminpanel.php:54
+#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
+#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
 msgid "Twitter"
 msgstr ""
 
-#: TwitterBridgePlugin.php:157
+#: TwitterBridgePlugin.php:152
 msgid "Login or register using Twitter"
 msgstr ""
 
-#: TwitterBridgePlugin.php:180
+#: TwitterBridgePlugin.php:175
 msgid "Twitter integration options"
 msgstr ""
 
-#: TwitterBridgePlugin.php:297
+#: TwitterBridgePlugin.php:292
 msgid "Twitter bridge configuration"
 msgstr ""
 
-#: TwitterBridgePlugin.php:322
+#: TwitterBridgePlugin.php:316
 msgid ""
-"The Twitter \"bridge\" plugin allows you to integrate your StatusNet "
-"instance with <a href=\"http://twitter.com/\">Twitter</a>."
+"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
+"with <a href=\"http://twitter.com/\">Twitter</a>."
 msgstr ""
 
-#: twitteradminpanel.php:65
+#: twitteradminpanel.php:62
 msgid "Twitter bridge settings"
 msgstr ""
 
-#: twitteradminpanel.php:150
+#: twitteradminpanel.php:145
 msgid "Invalid consumer key. Max length is 255 characters."
 msgstr ""
 
-#: twitteradminpanel.php:156
+#: twitteradminpanel.php:151
 msgid "Invalid consumer secret. Max length is 255 characters."
 msgstr ""
 
-#: twitteradminpanel.php:216
+#: twitteradminpanel.php:207
 msgid "Twitter application settings"
 msgstr ""
 
-#: twitteradminpanel.php:222
+#: twitteradminpanel.php:213
 msgid "Consumer key"
 msgstr ""
 
-#: twitteradminpanel.php:223
+#: twitteradminpanel.php:214
 msgid "Consumer key assigned by Twitter"
 msgstr ""
 
-#: twitteradminpanel.php:231
+#: twitteradminpanel.php:222
 msgid "Consumer secret"
 msgstr ""
 
-#: twitteradminpanel.php:232
+#: twitteradminpanel.php:223
 msgid "Consumer secret assigned by Twitter"
 msgstr ""
 
-#: twitteradminpanel.php:249
+#: twitteradminpanel.php:233
+msgid "Note: a global consumer key and secret are set."
+msgstr ""
+
+#: twitteradminpanel.php:240
 msgid "Integration source"
 msgstr ""
 
-#: twitteradminpanel.php:250
+#: twitteradminpanel.php:241
 msgid "Name of your Twitter application"
 msgstr ""
 
-#: twitteradminpanel.php:262
+#: twitteradminpanel.php:253
 msgid "Options"
 msgstr ""
 
-#: twitteradminpanel.php:269
+#: twitteradminpanel.php:260
 msgid "Enable \"Sign-in with Twitter\""
 msgstr ""
 
-#: twitteradminpanel.php:271
+#: twitteradminpanel.php:262
 msgid "Allow users to login with their Twitter credentials"
 msgstr ""
 
-#: twitteradminpanel.php:278
+#: twitteradminpanel.php:269
 msgid "Enable Twitter import"
 msgstr ""
 
-#: twitteradminpanel.php:280
+#: twitteradminpanel.php:271
 msgid ""
 "Allow users to import their Twitter friends' timelines. Requires daemons to "
 "be manually configured."
 msgstr ""
 
+#: twitteradminpanel.php:288 twittersettings.php:200
+msgid "Save"
+msgstr ""
+
+#: twitteradminpanel.php:288
+msgid "Save Twitter settings"
+msgstr ""
+
+#: twitterlogin.php:56
+msgid "Already logged in."
+msgstr ""
+
+#: twitterlogin.php:64
+msgid "Twitter Login"
+msgstr ""
+
+#: twitterlogin.php:69
+msgid "Login with your Twitter account"
+msgstr ""
+
+#: twitterlogin.php:87
+msgid "Sign in with Twitter"
+msgstr ""
+
+#: twitterauthorization.php:120 twittersettings.php:226
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: twitterauthorization.php:126
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: twitterauthorization.php:135
+msgid "Something weird happened."
+msgstr ""
+
 #: twitterauthorization.php:181 twitterauthorization.php:229
+#: twitterauthorization.php:300
 msgid "Couldn't link your Twitter account."
 msgstr ""
 
@@ -129,99 +170,197 @@ msgstr ""
 msgid "Couldn't link your Twitter account: oauth_token mismatch."
 msgstr ""
 
-#: twittersettings.php:59
+#: twitterauthorization.php:312
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your Twitter "
+"account to a local account. You can either create a new account, or connect "
+"with your existing account, if you have one."
+msgstr ""
+
+#: twitterauthorization.php:318
+msgid "Twitter Account Setup"
+msgstr ""
+
+#: twitterauthorization.php:351
+msgid "Connection options"
+msgstr ""
+
+#: twitterauthorization.php:360
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+
+#: twitterauthorization.php:381
+msgid "Create new account"
+msgstr ""
+
+#: twitterauthorization.php:383
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: twitterauthorization.php:386
+msgid "New nickname"
+msgstr ""
+
+#: twitterauthorization.php:388
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: twitterauthorization.php:391
+msgid "Create"
+msgstr ""
+
+#: twitterauthorization.php:396
+msgid "Connect existing account"
+msgstr ""
+
+#: twitterauthorization.php:398
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Twitter account."
+msgstr ""
+
+#: twitterauthorization.php:401
+msgid "Existing nickname"
+msgstr ""
+
+#: twitterauthorization.php:404
+msgid "Password"
+msgstr ""
+
+#: twitterauthorization.php:407
+msgid "Connect"
+msgstr ""
+
+#: twitterauthorization.php:423 twitterauthorization.php:432
+msgid "Registration not allowed."
+msgstr ""
+
+#: twitterauthorization.php:439
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: twitterauthorization.php:449
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: twitterauthorization.php:454
+msgid "Nickname not allowed."
+msgstr ""
+
+#: twitterauthorization.php:459
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: twitterauthorization.php:474
+msgid "Error registering user."
+msgstr ""
+
+#: twitterauthorization.php:485 twitterauthorization.php:523
+#: twitterauthorization.php:543
+msgid "Error connecting user to Twitter."
+msgstr ""
+
+#: twitterauthorization.php:505
+msgid "Invalid username or password."
+msgstr ""
+
+#: twittersettings.php:58
 msgid "Twitter settings"
 msgstr ""
 
-#: twittersettings.php:70
+#: twittersettings.php:69
 msgid ""
 "Connect your Twitter account to share your updates with your Twitter friends "
 "and vice-versa."
 msgstr ""
 
-#: twittersettings.php:118
+#: twittersettings.php:116
 msgid "Twitter account"
 msgstr ""
 
-#: twittersettings.php:123
+#: twittersettings.php:121
 msgid "Connected Twitter account"
 msgstr ""
 
-#: twittersettings.php:128
+#: twittersettings.php:126
 msgid "Disconnect my account from Twitter"
 msgstr ""
 
-#: twittersettings.php:133
+#: twittersettings.php:132
 msgid "Disconnecting your Twitter could make it impossible to log in! Please "
 msgstr ""
 
-#: twittersettings.php:137
+#: twittersettings.php:136
 msgid "set a password"
 msgstr ""
 
-#: twittersettings.php:139
+#: twittersettings.php:138
 msgid " first."
 msgstr ""
 
-#: twittersettings.php:143
+#. TRANS: %1$s is the current website name.
+#: twittersettings.php:142
 #, php-format
 msgid ""
 "Keep your %1$s account but disconnect from Twitter. You can use your %1$s "
 "password to log in."
 msgstr ""
 
-#: twittersettings.php:151
+#: twittersettings.php:150
 msgid "Disconnect"
 msgstr ""
 
-#: twittersettings.php:158
+#: twittersettings.php:157
 msgid "Preferences"
 msgstr ""
 
-#: twittersettings.php:162
+#: twittersettings.php:161
 msgid "Automatically send my notices to Twitter."
 msgstr ""
 
-#: twittersettings.php:169
+#: twittersettings.php:168
 msgid "Send local \"@\" replies to Twitter."
 msgstr ""
 
-#: twittersettings.php:176
+#: twittersettings.php:175
 msgid "Subscribe to my Twitter friends here."
 msgstr ""
 
-#: twittersettings.php:185
-msgid "Import my Friends Timeline."
-msgstr ""
-
-#: twittersettings.php:201
-msgid "Save"
+#: twittersettings.php:184
+msgid "Import my friends timeline."
 msgstr ""
 
-#: twittersettings.php:203
+#: twittersettings.php:202
 msgid "Add"
 msgstr ""
 
-#: twittersettings.php:228
-msgid "There was a problem with your session token. Try again, please."
-msgstr ""
-
-#: twittersettings.php:238
+#: twittersettings.php:236
 msgid "Unexpected form submission."
 msgstr ""
 
-#: twittersettings.php:257
+#: twittersettings.php:254
 msgid "Couldn't remove Twitter user."
 msgstr ""
 
-#: twittersettings.php:261
+#: twittersettings.php:258
 msgid "Twitter account disconnected."
 msgstr ""
 
-#: twittersettings.php:282 twittersettings.php:292
+#: twittersettings.php:278 twittersettings.php:288
 msgid "Couldn't save Twitter preferences."
 msgstr ""
 
-#: twittersettings.php:296
+#: twittersettings.php:292
 msgid "Twitter preferences saved."
 msgstr ""
+
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: daemons/twitterstatusfetcher.php:264
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr ""
index 90b0f0f14f4966300fd06f16922e3a5e267818a7..f913e4aeae87bc148dca6935851cd59b1305a3db 100644 (file)
@@ -30,7 +30,6 @@ function add_twitter_user($twitter_id, $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 = Foreign_user::getForeignUser($twitter_id, TWITTER_SERVICE);
 
     if (!empty($luser)) {
@@ -69,7 +68,6 @@ 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.
-
     $fuser = Foreign_user::getForeignUser($twitter_id, TWITTER_SERVICE);
 
     if (!empty($fuser)) {
@@ -87,9 +85,7 @@ function save_twitter_user($twitter_id, $screen_name)
         }
 
     } else {
-
         // Kill any old, invalid records for this screen name
-
         $fuser = Foreign_user::getByNickname($screen_name, TWITTER_SERVICE);
 
         if (!empty($fuser)) {
@@ -110,13 +106,11 @@ function save_twitter_user($twitter_id, $screen_name)
 }
 
 function is_twitter_bound($notice, $flink) {
-
     // Check to see if notice should go to Twitter
     if (!empty($flink) && ($flink->noticesync & FOREIGN_NOTICE_SEND)) {
 
         // If it's not a Twitter-style reply, or if the user WANTS to send replies,
         // or if it's in reply to a twitter notice
-
         if (!preg_match('/^@[a-zA-Z0-9_]{1,15}\b/u', $notice->content) ||
             ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) ||
             is_twitter_notice($notice->reply_to)) {
@@ -140,7 +134,6 @@ function broadcast_twitter($notice)
                                        TWITTER_SERVICE);
 
     // Don't bother with basic auth, since it's no longer allowed
-
     if (!empty($flink) && TwitterOAuthClient::isPackedToken($flink->credentials)) {
         if (!empty($notice->repeat_of) && is_twitter_notice($notice->repeat_of)) {
             $retweet = retweet_notice($flink, Notice::staticGet('id', $notice->repeat_of));
@@ -229,7 +222,6 @@ function broadcast_oauth($notice, $flink) {
 
         // This could represent a failure posting,
         // or the Twitter API might just be behaving flakey.
-
         $errmsg = sprintf('Twitter bridge - No data returned by Twitter API when ' .
                           'trying to post notice %d for User %s (user id %d).',
                           $notice->id,
@@ -242,7 +234,6 @@ function broadcast_oauth($notice, $flink) {
     }
 
     // Notice crossed the great divide
-
     $msg = sprintf('Twitter bridge - posted notice %d to Twitter using ' .
                    'OAuth for User %s (user id %d).',
                    $notice->id,
@@ -327,11 +318,9 @@ function remove_twitter_link($flink)
     // Notify the user that her Twitter bridge is down
 
     if (isset($user->email)) {
-
         $result = mail_twitter_bridge_removed($user);
 
         if (!$result) {
-
             $msg = 'Unable to send email to notify ' .
               "$user->nickname (user id: $user->id) " .
               'that their Twitter bridge link was ' .
@@ -340,7 +329,6 @@ function remove_twitter_link($flink)
             common_log(LOG_WARNING, $msg);
         }
     }
-
 }
 
 /**
@@ -353,7 +341,6 @@ function remove_twitter_link($flink)
  *
  * @return boolean success flag
  */
-
 function mail_twitter_bridge_removed($user)
 {
     $profile = $user->getProfile();
@@ -366,11 +353,11 @@ function mail_twitter_bridge_removed($user)
 
     $body = sprintf(_m('Hi, %1$s. We\'re sorry to inform you that your ' .
         'link to Twitter has been disabled. We no longer seem to have ' .
-    'permission to update your Twitter status. (Did you revoke ' .
-    '%3$s\'s access?)' . "\n\n" .
+    'permission to update your Twitter status. Did you maybe revoke ' .
+    '%3$s\'s access?' . "\n\n" .
     'You can re-enable your Twitter bridge by visiting your ' .
     "Twitter settings page:\n\n\t%2\$s\n\n" .
-        "Regards,\n%3\$s\n"),
+        "Regards,\n%3\$s"),
         $profile->getBestName(),
         common_local_url('twittersettings'),
         common_config('site', 'name'));
@@ -378,4 +365,3 @@ function mail_twitter_bridge_removed($user)
     common_switch_locale();
     return mail_to_user($user, $subject, $body);
 }
-
index 69f8da078a194b8aea3ec08768747dc7c40b26ec..d05a2c6b3eef8d61f94e5ee586eb654651a6867a 100644 (file)
@@ -40,7 +40,6 @@ if (!defined('STATUSNET')) {
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class TwitteradminpanelAction extends AdminPanelAction
 {
     /**
@@ -48,7 +47,6 @@ class TwitteradminpanelAction extends AdminPanelAction
      *
      * @return string page title
      */
-
     function title()
     {
         return _m('Twitter');
@@ -59,7 +57,6 @@ class TwitteradminpanelAction extends AdminPanelAction
      *
      * @return string instructions
      */
-
     function getInstructions()
     {
         return _m('Twitter bridge settings');
@@ -70,7 +67,6 @@ class TwitteradminpanelAction extends AdminPanelAction
      *
      * @return void
      */
-
     function showForm()
     {
         $form = new TwitterAdminPanelForm($this);
@@ -83,7 +79,6 @@ class TwitteradminpanelAction extends AdminPanelAction
      *
      * @return void
      */
-
     function saveSettings()
     {
         static $settings = array(
@@ -173,7 +168,6 @@ class TwitterAdminPanelForm extends AdminForm
      *
      * @return int ID of the form
      */
-
     function id()
     {
         return 'twitteradminpanel';
@@ -184,7 +178,6 @@ class TwitterAdminPanelForm extends AdminForm
      *
      * @return string class of the form
      */
-
     function formClass()
     {
         return 'form_settings';
@@ -195,7 +188,6 @@ class TwitterAdminPanelForm extends AdminForm
      *
      * @return string URL of the action
      */
-
     function action()
     {
         return common_local_url('twitteradminpanel');
@@ -206,7 +198,6 @@ class TwitterAdminPanelForm extends AdminForm
      *
      * @return void
      */
-
     function formData()
     {
         $this->out->elementStart(
@@ -239,7 +230,7 @@ class TwitterAdminPanelForm extends AdminForm
 
         if (!empty($globalConsumerKey) && !empty($globalConsumerSec)) {
             $this->li();
-            $this->out->element('p', 'form_guide', _('Note: a global consumer key and secret are set.'));
+            $this->out->element('p', 'form_guide', _m('Note: a global consumer key and secret are set.'));
             $this->unli();
         }
 
@@ -292,9 +283,8 @@ class TwitterAdminPanelForm extends AdminForm
      *
      * @return void
      */
-
     function formActions()
     {
-        $this->out->submit('submit', _('Save'), 'submit', null, _('Save Twitter settings'));
+        $this->out->submit('submit', _m('Save'), 'submit', null, _m('Save Twitter settings'));
     }
 }
index 7a896e1687a86b6ce736563286f5ae545ef36d4a..931a037230b2c26289fbd1cc1ed7fd3ed87647e4 100644 (file)
@@ -117,13 +117,13 @@ class TwitterauthorizationAction extends Action
             $token = $this->trimmed('token');
 
             if (!$token || $token != common_session_token()) {
-                $this->showForm(_('There was a problem with your session token. Try again, please.'));
+                $this->showForm(_m('There was a problem with your session token. Try again, please.'));
                 return;
             }
 
             if ($this->arg('create')) {
                 if (!$this->boolean('license')) {
-                    $this->showForm(_('You can\'t register if you don\'t agree to the license.'),
+                    $this->showForm(_m('You can\'t register if you don\'t agree to the license.'),
                                     $this->trimmed('newname'));
                     return;
                 }
@@ -132,7 +132,7 @@ class TwitterauthorizationAction extends Action
                 $this->connectNewUser();
             } else {
                 common_debug('Twitter bridge - ' . print_r($this->args, true));
-                $this->showForm(_('Something weird happened.'),
+                $this->showForm(_m('Something weird happened.'),
                                 $this->trimmed('newname'));
             }
         } else {
@@ -231,7 +231,6 @@ class TwitterauthorizationAction extends Action
         }
 
         if (common_logged_in()) {
-
             // Save the access token and Twitter user info
 
             $user = common_current_user();
@@ -298,7 +297,7 @@ class TwitterauthorizationAction extends Action
 
         if (empty($flink_id)) {
             common_log_db_error($flink, 'INSERT', __FILE__);
-            $this->serverError(_('Couldn\'t link your Twitter account.'));
+            $this->serverError(_m('Couldn\'t link your Twitter account.'));
         }
 
         return $flink_id;
@@ -310,13 +309,13 @@ class TwitterauthorizationAction extends Action
             $this->element('div', array('class' => 'error'), $this->error);
         } else {
             $this->element('div', 'instructions',
-                           sprintf(_('This is the first time you\'ve logged into %s so we must connect your Twitter account to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
+                           sprintf(_m('This is the first time you\'ve logged into %s so we must connect your Twitter account to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
         }
     }
 
     function title()
     {
-        return _('Twitter Account Setup');
+        return _m('Twitter Account Setup');
     }
 
     function showForm($error=null, $username=null)
@@ -349,7 +348,7 @@ class TwitterauthorizationAction extends Action
                                           'class' => 'form_settings',
                                           'action' => common_local_url('twitterauthorization')));
         $this->elementStart('fieldset', array('id' => 'settings_twitter_connect_options'));
-        $this->element('legend', null, _('Connection options'));
+        $this->element('legend', null, _m('Connection options'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
         $this->element('input', array('type' => 'checkbox',
@@ -358,7 +357,7 @@ class TwitterauthorizationAction extends Action
                                       'name' => 'license',
                                       'value' => 'true'));
         $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
-        $message = _('My text and files are available under %s ' .
+        $message = _m('My text and files are available under %s ' .
                      'except this private data: password, ' .
                      'email address, IM address, and phone number.');
         $link = '<a href="' .
@@ -379,33 +378,33 @@ class TwitterauthorizationAction extends Action
         $this->elementStart('fieldset');
         $this->hidden('token', common_session_token());
         $this->element('legend', null,
-                       _('Create new account'));
+                       _m('Create new account'));
         $this->element('p', null,
-                       _('Create a new user with this nickname.'));
+                       _m('Create a new user with this nickname.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
-        $this->input('newname', _('New nickname'),
+        $this->input('newname', _m('New nickname'),
                      ($this->username) ? $this->username : '',
-                     _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+                     _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('create', _('Create'));
+        $this->submit('create', _m('Create'));
         $this->elementEnd('fieldset');
 
         $this->elementStart('fieldset');
         $this->element('legend', null,
-                       _('Connect existing account'));
+                       _m('Connect existing account'));
         $this->element('p', null,
-                       _('If you already have an account, login with your username and password to connect it to your Twitter account.'));
+                       _m('If you already have an account, login with your username and password to connect it to your Twitter account.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
-        $this->input('nickname', _('Existing nickname'));
+        $this->input('nickname', _m('Existing nickname'));
         $this->elementEnd('li');
         $this->elementStart('li');
-        $this->password('password', _('Password'));
+        $this->password('password', _m('Password'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('connect', _('Connect'));
+        $this->submit('connect', _m('Connect'));
         $this->elementEnd('fieldset');
 
         $this->elementEnd('fieldset');
@@ -421,7 +420,7 @@ class TwitterauthorizationAction extends Action
     function createNewUser()
     {
         if (common_config('site', 'closed')) {
-            $this->clientError(_('Registration not allowed.'));
+            $this->clientError(_m('Registration not allowed.'));
             return;
         }
 
@@ -430,14 +429,14 @@ class TwitterauthorizationAction extends Action
         if (common_config('site', 'inviteonly')) {
             $code = $_SESSION['invitecode'];
             if (empty($code)) {
-                $this->clientError(_('Registration not allowed.'));
+                $this->clientError(_m('Registration not allowed.'));
                 return;
             }
 
             $invite = Invitation::staticGet($code);
 
             if (empty($invite)) {
-                $this->clientError(_('Not a valid invitation code.'));
+                $this->clientError(_m('Not a valid invitation code.'));
                 return;
             }
         }
@@ -447,17 +446,17 @@ class TwitterauthorizationAction extends Action
         if (!Validate::string($nickname, array('min_length' => 1,
                                                'max_length' => 64,
                                                'format' => NICKNAME_FMT))) {
-            $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
+            $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
             return;
         }
 
         if (!User::allowed_nickname($nickname)) {
-            $this->showForm(_('Nickname not allowed.'));
+            $this->showForm(_m('Nickname not allowed.'));
             return;
         }
 
         if (User::staticGet('nickname', $nickname)) {
-            $this->showForm(_('Nickname already in use. Try another one.'));
+            $this->showForm(_m('Nickname already in use. Try another one.'));
             return;
         }
 
@@ -472,7 +471,7 @@ class TwitterauthorizationAction extends Action
         $user = User::register($args);
 
         if (empty($user)) {
-            $this->serverError(_('Error registering user.'));
+            $this->serverError(_m('Error registering user.'));
             return;
         }
 
@@ -483,7 +482,7 @@ class TwitterauthorizationAction extends Action
         save_twitter_user($this->twuid, $this->tw_fields['screen_name']);
 
         if (!$result) {
-            $this->serverError(_('Error connecting user to Twitter.'));
+            $this->serverError(_m('Error connecting user to Twitter.'));
             return;
         }
 
@@ -503,7 +502,7 @@ class TwitterauthorizationAction extends Action
         $password = $this->trimmed('password');
 
         if (!common_check_user($nickname, $password)) {
-            $this->showForm(_('Invalid username or password.'));
+            $this->showForm(_m('Invalid username or password.'));
             return;
         }
 
@@ -521,7 +520,7 @@ class TwitterauthorizationAction extends Action
         save_twitter_user($this->twuid, $this->tw_fields['screen_name']);
 
         if (!$result) {
-            $this->serverError(_('Error connecting user to Twitter.'));
+            $this->serverError(_m('Error connecting user to Twitter.'));
             return;
         }
 
@@ -541,7 +540,7 @@ class TwitterauthorizationAction extends Action
         $result = $this->flinkUser($user->id, $this->twuid);
 
         if (empty($result)) {
-            $this->serverError(_('Error connecting user to Twitter.'));
+            $this->serverError(_m('Error connecting user to Twitter.'));
             return;
         }
 
index 79421fb27da5a11f66b2ffba24f079578c2cab2f..5b5bfae191d9d616ed33e0aafeeb5d682f2df5d9 100644 (file)
@@ -46,7 +46,6 @@ require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
  *
  * @see      SettingsAction
  */
-
 class TwitterloginAction extends Action
 {
     function handle($args)
@@ -54,7 +53,7 @@ class TwitterloginAction extends Action
         parent::handle($args);
 
         if (common_is_real_login()) {
-            $this->clientError(_('Already logged in.'));
+            $this->clientError(_m('Already logged in.'));
         }
 
         $this->showPage();
@@ -62,12 +61,12 @@ class TwitterloginAction extends Action
 
     function title()
     {
-        return _('Twitter Login');
+        return _m('Twitter Login');
     }
 
     function getInstructions()
     {
-        return _('Login with your Twitter account');
+        return _m('Login with your Twitter account');
     }
 
     function showPageNotice()
@@ -85,7 +84,7 @@ class TwitterloginAction extends Action
                                                                   null,
                                                                   array('signin' => true))));
         $this->element('img', array('src' => common_path('plugins/TwitterBridge/Sign-in-with-Twitter-lighter.png'),
-                                    'alt' => 'Sign in with Twitter'));
+                                    'alt' => _m('Sign in with Twitter')));
         $this->elementEnd('a');
     }
 
index 876e304259df7818afd5b67f708d80379e428845..345510a0d0b5dd4e472466a77dbd091ac01ddbfe 100644 (file)
@@ -200,7 +200,6 @@ class TwitterOAuthClient extends OAuthClient
     function statusesHomeTimeline($since_id = null, $max_id = null,
                                   $cnt = null, $page = null)
     {
-
         $url    = 'https://twitter.com/statuses/home_timeline.json';
 
         $params = array('include_entities' => 'true');
index 631b29f52a83f1ab294162af689d3a30e20679ef..dab8ab34fe2514595ec53c3fad22434e085e1b0b 100644 (file)
@@ -45,7 +45,6 @@ require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
  *
  * @see      SettingsAction
  */
-
 class TwittersettingsAction extends ConnectSettingsAction
 {
     /**
@@ -79,7 +78,6 @@ class TwittersettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function showContent()
     {
 
@@ -130,6 +128,7 @@ class TwittersettingsAction extends ConnectSettingsAction
             if (!$user->password) {
 
                 $this->elementStart('p', array('class' => 'form_guide'));
+                // @todo FIXME: Bad i18n (patchwork in three parts).
                 $this->text(_m('Disconnecting your Twitter ' .
                                'could make it impossible to log in! Please '));
                 $this->element('a',
@@ -139,7 +138,7 @@ class TwittersettingsAction extends ConnectSettingsAction
                 $this->text(_m(' first.'));
                 $this->elementEnd('p');
             } else {
-
+                // TRANS: %1$s is the current website name.
                 $note = _m('Keep your %1$s account but disconnect from Twitter. ' .
                     'You can use your %1$s password to log in.');
 
@@ -182,7 +181,7 @@ class TwittersettingsAction extends ConnectSettingsAction
             if (common_config('twitterimport','enabled')) {
                 $this->elementStart('li');
                 $this->checkbox('noticerecv',
-                                _m('Import my Friends Timeline.'),
+                                _m('Import my friends timeline.'),
                                 ($flink) ?
                                 ($flink->noticesync & FOREIGN_NOTICE_RECV) :
                                 false);
@@ -219,7 +218,6 @@ class TwittersettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function handlePost()
     {
         // CSRF protection
@@ -244,7 +242,6 @@ class TwittersettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function removeTwitterAccount()
     {
         $user = common_current_user();
@@ -266,7 +263,6 @@ class TwittersettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function savePreferences()
     {
         $noticesend = $this->boolean('noticesend');
@@ -295,5 +291,4 @@ class TwittersettingsAction extends ConnectSettingsAction
 
         $this->showForm(_m('Twitter preferences saved.'), true);
     }
-
 }
diff --git a/plugins/UserLimit/UserLimitPlugin.php b/plugins/UserLimit/UserLimitPlugin.php
new file mode 100644 (file)
index 0000000..ab31872
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to limit number of users that can register (best for cloud providers)
+ *
+ * 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  Action
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Plugin to limit number of users that can register (best for cloud providers)
+ *
+ * For cloud providers whose freemium model is based on how many
+ * users can register. We use it on the StatusNet Cloud.
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@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/
+ *
+ * @seeAlso  Location
+ */
+
+class UserLimitPlugin extends Plugin
+{
+    public $maxUsers = null;
+
+    function onStartUserRegister(&$user, &$profile)
+    {
+        $this->_checkMaxUsers();
+        return true;
+    }
+
+    function onStartRegistrationTry($action)
+    {
+        $this->_checkMaxUsers();
+        return true;
+    }
+
+    function _checkMaxUsers()
+    {
+        if (!is_null($this->maxUsers)) {
+
+            $cls = new User();
+
+            $cnt = $cls->count();
+
+            if ($cnt >= $this->maxUsers) {
+                $msg = sprintf(_('Cannot register; maximum number of users (%d) reached.'),
+                               $this->maxUsers);
+
+                throw new ClientException($msg);
+            }
+        }
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'UserLimit',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:UserLimit',
+                            'description' =>
+                            _m('Limit the number of users who can register.'));
+        return true;
+    }
+}
diff --git a/plugins/UserLimit/locale/UserLimit.pot b/plugins/UserLimit/locale/UserLimit.pot
new file mode 100644 (file)
index 0000000..fcce8f6
--- /dev/null
@@ -0,0 +1,21 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: UserLimitPlugin.php:89
+msgid "Limit the number of users who can register."
+msgstr ""
diff --git a/plugins/UserLimitPlugin.php b/plugins/UserLimitPlugin.php
deleted file mode 100644 (file)
index ab31872..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to limit number of users that can register (best for cloud providers)
- *
- * 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  Action
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-/**
- * Plugin to limit number of users that can register (best for cloud providers)
- *
- * For cloud providers whose freemium model is based on how many
- * users can register. We use it on the StatusNet Cloud.
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Evan Prodromou <evan@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/
- *
- * @seeAlso  Location
- */
-
-class UserLimitPlugin extends Plugin
-{
-    public $maxUsers = null;
-
-    function onStartUserRegister(&$user, &$profile)
-    {
-        $this->_checkMaxUsers();
-        return true;
-    }
-
-    function onStartRegistrationTry($action)
-    {
-        $this->_checkMaxUsers();
-        return true;
-    }
-
-    function _checkMaxUsers()
-    {
-        if (!is_null($this->maxUsers)) {
-
-            $cls = new User();
-
-            $cnt = $cls->count();
-
-            if ($cnt >= $this->maxUsers) {
-                $msg = sprintf(_('Cannot register; maximum number of users (%d) reached.'),
-                               $this->maxUsers);
-
-                throw new ClientException($msg);
-            }
-        }
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'UserLimit',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:UserLimit',
-                            'description' =>
-                            _m('Limit the number of users who can register.'));
-        return true;
-    }
-}
diff --git a/plugins/WikiHashtags/WikiHashtagsPlugin.php b/plugins/WikiHashtags/WikiHashtagsPlugin.php
new file mode 100644 (file)
index 0000000..c6c976b
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to show WikiHashtags content in the sidebar
+ *
+ * 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  Plugin
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2008 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);
+}
+
+/**
+ * Plugin to use WikiHashtags
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@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/
+ *
+ * @see      Event
+ */
+
+class WikiHashtagsPlugin extends Plugin
+{
+    const VERSION = '0.1';
+
+    function __construct($code=null)
+    {
+        parent::__construct();
+    }
+
+    function onStartShowSections($action)
+    {
+        $name = $action->trimmed('action');
+
+        if ($name == 'tag') {
+
+            $taginput = $action->trimmed('tag');
+            $tag = common_canonical_tag($taginput);
+
+            if (!empty($tag)) {
+
+                $url = sprintf('http://hashtags.wikia.com/index.php?title=%s&action=render',
+                               urlencode($tag));
+                $editurl = sprintf('http://hashtags.wikia.com/index.php?title=%s&action=edit',
+                                   urlencode($tag));
+
+                $request = HTTPClient::start();
+                $response = $request->get($url);
+                $html = $response->getBody();
+
+                $action->elementStart('div', array('id' => 'wikihashtags', 'class' => 'section'));
+
+                if ($response->isOk() && !empty($html)) {
+                    $action->element('style', null,
+                                     "span.editsection { display: none }\n".
+                                     "table.toc { display: none }");
+                    $action->raw($html);
+                    $action->elementStart('p');
+                    $action->element('a', array('href' => $editurl,
+                                                'title' => sprintf(_('Edit the article for #%s on WikiHashtags'), $tag)),
+                                     _('Edit'));
+                    $action->element('a', array('href' => 'http://www.gnu.org/copyleft/fdl.html',
+                                                'title' => _('Shared under the terms of the GNU Free Documentation License'),
+                                                'rel' => 'license'),
+                                     'GNU FDL');
+                    $action->elementEnd('p');
+                } else {
+                    $action->element('a', array('href' => $editurl),
+                                     sprintf(_('Start the article for #%s on WikiHashtags'), $tag));
+                }
+
+                $action->elementEnd('div');
+            }
+        }
+
+        return true;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'WikiHashtags',
+                            'version' => self::VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => 'http://status.net/wiki/Plugin:WikiHashtags',
+                            'rawdescription' =>
+                            _m('Gets hashtag descriptions from <a href="http://hashtags.wikia.com/">WikiHashtags</a>.'));
+        return true;
+    }
+}
diff --git a/plugins/WikiHashtags/locale/WikiHashtags.pot b/plugins/WikiHashtags/locale/WikiHashtags.pot
new file mode 100644 (file)
index 0000000..cae1daa
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: WikiHashtagsPlugin.php:110
+msgid ""
+"Gets hashtag descriptions from <a href=\"http://hashtags.wikia.com/"
+"\">WikiHashtags</a>."
+msgstr ""
diff --git a/plugins/WikiHashtagsPlugin.php b/plugins/WikiHashtagsPlugin.php
deleted file mode 100644 (file)
index c6c976b..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to show WikiHashtags content in the sidebar
- *
- * 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  Plugin
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2008 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);
-}
-
-/**
- * Plugin to use WikiHashtags
- *
- * @category Plugin
- * @package  StatusNet
- * @author   Evan Prodromou <evan@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/
- *
- * @see      Event
- */
-
-class WikiHashtagsPlugin extends Plugin
-{
-    const VERSION = '0.1';
-
-    function __construct($code=null)
-    {
-        parent::__construct();
-    }
-
-    function onStartShowSections($action)
-    {
-        $name = $action->trimmed('action');
-
-        if ($name == 'tag') {
-
-            $taginput = $action->trimmed('tag');
-            $tag = common_canonical_tag($taginput);
-
-            if (!empty($tag)) {
-
-                $url = sprintf('http://hashtags.wikia.com/index.php?title=%s&action=render',
-                               urlencode($tag));
-                $editurl = sprintf('http://hashtags.wikia.com/index.php?title=%s&action=edit',
-                                   urlencode($tag));
-
-                $request = HTTPClient::start();
-                $response = $request->get($url);
-                $html = $response->getBody();
-
-                $action->elementStart('div', array('id' => 'wikihashtags', 'class' => 'section'));
-
-                if ($response->isOk() && !empty($html)) {
-                    $action->element('style', null,
-                                     "span.editsection { display: none }\n".
-                                     "table.toc { display: none }");
-                    $action->raw($html);
-                    $action->elementStart('p');
-                    $action->element('a', array('href' => $editurl,
-                                                'title' => sprintf(_('Edit the article for #%s on WikiHashtags'), $tag)),
-                                     _('Edit'));
-                    $action->element('a', array('href' => 'http://www.gnu.org/copyleft/fdl.html',
-                                                'title' => _('Shared under the terms of the GNU Free Documentation License'),
-                                                'rel' => 'license'),
-                                     'GNU FDL');
-                    $action->elementEnd('p');
-                } else {
-                    $action->element('a', array('href' => $editurl),
-                                     sprintf(_('Start the article for #%s on WikiHashtags'), $tag));
-                }
-
-                $action->elementEnd('div');
-            }
-        }
-
-        return true;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'WikiHashtags',
-                            'version' => self::VERSION,
-                            'author' => 'Evan Prodromou',
-                            'homepage' => 'http://status.net/wiki/Plugin:WikiHashtags',
-                            'rawdescription' =>
-                            _m('Gets hashtag descriptions from <a href="http://hashtags.wikia.com/">WikiHashtags</a>.'));
-        return true;
-    }
-}
index b72bd55d6d259ee31f4f31a6d7edbb55b0cf2013..fa683c4836e7dc643246c43cd11acac2bd9df7a3 100644 (file)
@@ -47,7 +47,6 @@ if (!defined('STATUSNET')) {
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
  * @link      http://status.net/
  */
-
 class WikiHowProfilePlugin extends Plugin
 {
     function onPluginVersion(&$versions)
@@ -57,7 +56,7 @@ class WikiHowProfilePlugin extends Plugin
                             'author' => 'Brion Vibber',
                             'homepage' => 'http://status.net/wiki/Plugin:Sample',
                             'rawdescription' =>
-                            _m('Fetches avatar and other profile info for WikiHow users when setting up an account via OpenID.'));
+                            _m('Fetches avatar and other profile information for WikiHow users when setting up an account via OpenID.'));
         return true;
     }
 
@@ -107,14 +106,14 @@ class WikiHowProfilePlugin extends Plugin
 
     /**
      * Given a user's WikiHow profile URL, find their avatar.
-     * 
+     *
      * @param string $profileUrl user page on the wiki
-     * 
+     *
      * @return array of data; possible members:
      *               'avatar' => full URL to avatar image
-     * 
+     *
      * @throws Exception on various low-level failures
-     * 
+     *
      * @todo pull location, web site, and about sections -- they aren't currently marked up cleanly.
      */
     private function fetchProfile($profileUrl)
@@ -169,14 +168,14 @@ class WikiHowProfilePlugin extends Plugin
     private function saveAvatar($user, $url)
     {
         if (!common_valid_http_url($url)) {
-            throw new ServerException(sprintf(_m("Invalid avatar URL %s"), $url));
+            throw new ServerException(sprintf(_m("Invalid avatar URL %s."), $url));
         }
 
         // @fixme this should be better encapsulated
         // ripped from OStatus via oauthstore.php (for old OMB client)
         $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar');
         if (!copy($url, $temp_filename)) {
-            throw new ServerException(sprintf(_m("Unable to fetch avatar from %s"), $url));
+            throw new ServerException(sprintf(_m("Unable to fetch avatar from %s."), $url));
         }
 
         $profile = $user->getProfile();
@@ -191,6 +190,4 @@ class WikiHowProfilePlugin extends Plugin
         rename($temp_filename, Avatar::path($filename));
         $profile->setOriginal($filename);
     }
-
 }
-
index a1e49c769c623e87406b497967771ba62f8b1977..6da28186c9e2c1ce3f1b756c5036c25a58ef2a5b 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 22:56+0000\n"
+"POT-Creation-Date: 2010-09-18 22:06+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,18 +16,18 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: WikiHowProfilePlugin.php:60
+#: WikiHowProfilePlugin.php:59
 msgid ""
-"Fetches avatar and other profile info for WikiHow users when setting up an "
-"account via OpenID."
+"Fetches avatar and other profile information for WikiHow users when setting "
+"up an account via OpenID."
 msgstr ""
 
-#: WikiHowProfilePlugin.php:172
+#: WikiHowProfilePlugin.php:171
 #, php-format
-msgid "Invalid avatar URL %s"
+msgid "Invalid avatar URL %s."
 msgstr ""
 
-#: WikiHowProfilePlugin.php:179
+#: WikiHowProfilePlugin.php:178
 #, php-format
-msgid "Unable to fetch avatar from %s"
+msgid "Unable to fetch avatar from %s."
 msgstr ""
diff --git a/plugins/XCache/XCachePlugin.php b/plugins/XCache/XCachePlugin.php
new file mode 100644 (file)
index 0000000..2baa290
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Plugin to implement cache interface for XCache variable cache
+ *
+ * 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/>.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * A plugin to use XCache's variable cache for the cache interface
+ *
+ * New plugin interface lets us use alternative cache systems
+ * for caching. This one uses XCache's variable cache.
+ *
+ * @category  Cache
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@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/
+ */
+
+class XCachePlugin extends Plugin
+{
+    /**
+     * Get a value associated with a key
+     *
+     * The value should have been set previously.
+     *
+     * @param string &$key   in; Lookup key
+     * @param mixed  &$value out; value associated with key
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheGet(&$key, &$value)
+    {
+        if (!xcache_isset($key)) {
+            $value = false;
+        } else {
+            $value = xcache_get($key);
+            $value = unserialize($value);
+        }
+        Event::handle('EndCacheGet', array($key, &$value));
+        return false;
+    }
+
+    /**
+     * Associate a value with a key
+     *
+     * @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 &$expiry  in; Expiry (passed through to Memcache)
+     * @param boolean &$success out; Whether the set was successful
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
+    {
+        $success = xcache_set($key, serialize($value));
+
+        Event::handle('EndCacheSet', array($key, $value, $flag,
+                                           $expiry));
+        return false;
+    }
+
+    /**
+     * Delete a value associated with a key
+     *
+     * @param string  &$key     in; Key to lookup
+     * @param boolean &$success out; whether it worked
+     *
+     * @return boolean hook success
+     */
+
+    function onStartCacheDelete(&$key, &$success)
+    {
+        $success = xcache_unset($key);
+        Event::handle('EndCacheDelete', array($key));
+        return false;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'XCache',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Craig Andrews',
+                            'homepage' => 'http://status.net/wiki/Plugin:XCache',
+                            'rawdescription' =>
+                            _m('Use the <a href="http://xcache.lighttpd.net/">XCache</a> variable cache to cache query results.'));
+        return true;
+    }
+}
+
diff --git a/plugins/XCache/locale/XCache.pot b/plugins/XCache/locale/XCache.pot
new file mode 100644 (file)
index 0000000..82992fc
--- /dev/null
@@ -0,0 +1,23 @@
+# 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: 2010-09-18 22:06+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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: XCachePlugin.php:120
+msgid ""
+"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
+"cache query results."
+msgstr ""
diff --git a/plugins/XCachePlugin.php b/plugins/XCachePlugin.php
deleted file mode 100644 (file)
index 2baa290..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * Plugin to implement cache interface for XCache variable cache
- *
- * 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/>.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * A plugin to use XCache's variable cache for the cache interface
- *
- * New plugin interface lets us use alternative cache systems
- * for caching. This one uses XCache's variable cache.
- *
- * @category  Cache
- * @package   StatusNet
- * @author    Evan Prodromou <evan@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/
- */
-
-class XCachePlugin extends Plugin
-{
-    /**
-     * Get a value associated with a key
-     *
-     * The value should have been set previously.
-     *
-     * @param string &$key   in; Lookup key
-     * @param mixed  &$value out; value associated with key
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheGet(&$key, &$value)
-    {
-        if (!xcache_isset($key)) {
-            $value = false;
-        } else {
-            $value = xcache_get($key);
-            $value = unserialize($value);
-        }
-        Event::handle('EndCacheGet', array($key, &$value));
-        return false;
-    }
-
-    /**
-     * Associate a value with a key
-     *
-     * @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 &$expiry  in; Expiry (passed through to Memcache)
-     * @param boolean &$success out; Whether the set was successful
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
-    {
-        $success = xcache_set($key, serialize($value));
-
-        Event::handle('EndCacheSet', array($key, $value, $flag,
-                                           $expiry));
-        return false;
-    }
-
-    /**
-     * Delete a value associated with a key
-     *
-     * @param string  &$key     in; Key to lookup
-     * @param boolean &$success out; whether it worked
-     *
-     * @return boolean hook success
-     */
-
-    function onStartCacheDelete(&$key, &$success)
-    {
-        $success = xcache_unset($key);
-        Event::handle('EndCacheDelete', array($key));
-        return false;
-    }
-
-    function onPluginVersion(&$versions)
-    {
-        $versions[] = array('name' => 'XCache',
-                            'version' => STATUSNET_VERSION,
-                            'author' => 'Craig Andrews',
-                            'homepage' => 'http://status.net/wiki/Plugin:XCache',
-                            'rawdescription' =>
-                            _m('Use the <a href="http://xcache.lighttpd.net/">XCache</a> variable cache to cache query results.'));
-        return true;
-    }
-}
-
index f10f2084244985ca4dcf8168cfe987365855cdf7..a0ab5819d562a21d3e76b370ed026ca8c39162cb 100755 (executable)
@@ -81,45 +81,6 @@ END;
     chdir($old);
 }
 
-function do_translatewiki_plugin($basedir, $plugin)
-{
-    $yamldir = "$basedir/locale/TranslateWiki";
-    if (!file_exists($yamldir)) {
-        mkdir($yamldir);
-    }
-    $outfile = "$yamldir/StatusNet-{$plugin}.yml";
-    $pluginlc = strtolower( $plugin );
-    $data = <<<END
----
-BASIC:
-  id: out-statusnet-{$pluginlc}
-  label: StatusNet - {$plugin}
-  namespace: NS_STATUSNET
-  description: "{{int:bw-desc-statusnet-plugin}}"
-  class: FileBasedMessageGroup
-  display: out/statusnet/{$pluginlc}
-
-FILES:
-  class: GettextFFS
-  sourcePattern: %GROUPROOT%/statusnet/plugins/{$plugin}/locale/{$plugin}.pot
-  targetPattern: statusnet/plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po
-  codeMap:
-    en-gb: en_GB
-    no: nb
-    pt-br: pt_BR
-    zh-hans: zh_CN
-    zh-hant: zh_TW
-
-MANGLER
-  class: StringMatcher
-  prefix: {$pluginlc}-
-  patterns:
-    - "*"
-
-END;
-    file_put_contents($outfile, $data);
-}
-
 function get_plugins($dir)
 {
     $plugins = array();
@@ -168,7 +129,6 @@ function update_plugin($basedir, $name)
     $dir = "$basedir/plugins/$name";
     if (plugin_using_gettext($dir)) {
         do_update_plugin($dir, $name);
-        do_translatewiki_plugin($basedir, $name);
         return true;
     } else {
         return false;
@@ -200,8 +160,6 @@ foreach ($args as $arg) {
     }
 }
 
-
-
 if ($all || $core) {
     echo "core...";
     update_core(INSTALLDIR, 'statusnet');
index 89d937e9dd28d293418acd08377d68b74cd22dcf..1fe513b13baa86f19549b7014ea2bdb8416231f9 100755 (executable)
@@ -77,7 +77,7 @@ foreach ($languages as $language) {
         http_build_query(array(
             'title' => 'Special:Translate',
             'task' => 'export-to-file',
-            'group' => 'out-statusnet',
+            'group' => 'out-statusnet-core',
             'language' => $twnCode));
 
     $lcdir = INSTALLDIR . '/locale/' . $code;